将文件读入数组会返回错误的元素

时间:2015-09-08 18:24:17

标签: java arrays file input output

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

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();

        }
    }
}

3 个答案:

答案 0 :(得分:4)

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;
        }

答案 1 :(得分:1)

您的数字阅读器循环正在向数组添加第一个数字,将下一个数字添加到总和中。

如果输入为1 2 3 4 5 6,则数组为[1, 3, 5],您的总和为2 + 4 + 6 = 12.

答案 2 :(得分:1)

您正在一次性阅读下两个整数。每次调用scanner.nextInt()时,它都会读取下一个int。您需要将nextInt存储在临时变量中并在两个位置使用它。

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