将文件读入数组 returns 个错误的元素

Read file into array returns wrong elements

我正在尝试获取用户的输入,如果它与现有文件之一匹配,则读取该文件并将单词、字母或数字放入一个数组中。 "words" 和 "alphabet" 文件似乎工作正常,但 "numbers" 给我一个问题。它找到文件,读取它,将它放入一个数组中,并给出数字的总和;然而,数组的输出是每隔一个数字,而不是所有数字,就像它应该做的那样。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class fileIO
{
    public static void main (String[] args) throws FileNotFoundException
    {
        String filename;
        System.out.println("Please enter name of file (alphabet,words,numbers): ");
        Scanner input = new Scanner(System.in);
        filename = input.nextLine();


        if(filename.equals("numbers"))
        {
            int sum = 0;
            Scanner reader = new Scanner(new File("/home/ninjew/workspace/FileIO/src/" + filename + ".txt"));
            ArrayList<Integer> arr = new ArrayList<Integer>();
            while(reader.hasNext())
            {
                arr.add(reader.nextInt());
                sum = sum + reader.nextInt();
            }
            System.out.println(arr);
            System.out.println("The summation is: " + sum);
            reader.close();
        }

        else if(filename.equals("words") || filename.equals("alphabet"))
        {
            Scanner reader = new Scanner(new File("/home/ninjew/workspace/FileIO/src/" + filename + ".txt"));
            // This is for words and letters within the file. Print words and letters.
            ArrayList<String> arr = new ArrayList<String>();

            while(reader.hasNext())
            {
                String line = reader.next();

                Scanner scanner = new Scanner(line);
                scanner.useDelimiter(",");
                while(scanner.hasNext()){
                    arr.add(scanner.next());
                }
                scanner.close();
            }
            System.out.println(arr);
            reader.close();

        }
    }
}

if(filename.equals("numbers")) 中,您正在对该块中的文件进行两次读取,这就是它跳过数字的原因

        while(reader.hasNext())
        {
            arr.add(reader.nextInt());
            sum = sum + reader.nextInt();
        }

应该是

        while(reader.hasNext())
        {
            int val = reader.nextInt();
            arr.add(val);
            sum = sum + val;
        }

您的数字 reader 循环正在将第一个数字添加到数组中,并将下一个数字添加到总和中。

如果输入是 1 2 3 4 5 6,你的数组是 [1, 3, 5],你的总和是 2 + 4 + 6 = 12。

您正在一次读取接下来的两个整数。每次调用 scanner.nextInt() 时,它都会读取下一个整数。您需要将 nextInt 存储在临时变量中并在这两个地方使用它。

while(reader.hasNext())
            {
                int next = reader.nextInt();
                arr.add(next);
                sum = sum + next;
            }