扫描程序未将值分配给数组

时间:2015-10-21 03:50:28

标签: java arrays file-io io

FileReader myReader = new FileReader(myReaderRef);
    Scanner input = new Scanner(myReader);
    int arraySize = 0;
    while(input.hasNextLine()){
        arraySize++;
        input.nextLine();
    }

    int[] numbers;
    numbers = new int[arraySize];

    while(input.hasNextLine()){
        for(int i=0; i < numbers.length; i++){
            numbers[i] = input.nextInt();
        }
    }
    input.close();
    System.out.print(numbers[1]);
}
}

并且正在读取的文本文件读取如下:

10
2
5
1
7
4
9
3
6
8

每当我使用system.out.print输出其中一个数组插槽时,无论我调用哪个数组位置,它都只给出0。我哪里错了?

编辑:我必须关闭并重新启动文件阅读器和扫描仪。谢谢你的帮助!

4 个答案:

答案 0 :(得分:2)

您尝试阅读文件两次而不回到开头。第一次是计数行,第二次是读取数据。因为您不返回文件的开头,所以不会在任何地方加载/存储任何数据。所以你应该重新开始你的Scanner,例如。关闭并重新开放。

或者您可能需要考虑使用ArrayList,因此您只需要阅读一次文件。

List<Integer> numbers = new ArrayList<Integer>();
Scanner input = new Scanner(myReader);
while (input.hasNextLine()) {
    numbers.add(input.nextInt());
    input.nextLine();  // You might need this to get to the next line as nextInt() just reads the int token.
}
input.close()

答案 1 :(得分:1)

在计算行数后,您需要重新启动radio(因为它位于Scanner的末尾)。

File

答案 2 :(得分:0)

在你的第一个while循环游标中已经到了文件的最后一行。所以它在下一个循环之后无法找到任何东西。所以你必须创建2个Scanner对象。

        Scanner input = new Scanner(new File("D:\\numbers.txt"));
        int arraySize =0;
        while(input.hasNextLine()){
            arraySize++;
            input.nextLine();
        }

        int[] numbers;
        numbers = new int[arraySize];
        input.close();
        Scanner input2 = new Scanner(new File("D:\\numbers.txt"));
        while(input2.hasNextLine()){
            for(int i=0; i < numbers.length; i++){
                numbers[i] = input2.nextInt();
            }
        }
        input2.close();
        System.out.print(numbers[1]);

答案 3 :(得分:-1)

我试图尽可能地简化问题。

为您的案例添加/删除元素的最简单方法是使用ArrayList对象。阅读评论并运行项目。

下面的第一个整数列表是文件的原始输入。

第二个列表包含数组的打印语句。这些答案可能不是您希望将它们编入索引的地方,但我确信这会让您走上正确的道路:)

10
2
5
1
7
4
9
3
6
8
[10, 2, 5, 1, 7, 4, 9, 3, 6, 8]
    3
    1
    7
    5
    2
    8







package cs1410;

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

    import javax.swing.JFileChooser;

    public class ArrayReader {

        public static void main(String[] args) throws FileNotFoundException {
            // Creates an array list
            ArrayList<Integer> answer = new ArrayList<Integer>();

            // Reads in information
            JFileChooser chooser = new JFileChooser();
            if (JFileChooser.APPROVE_OPTION != chooser.showOpenDialog(null)) {
                return;
            }
            File file = chooser.getSelectedFile();



            // Scan chosen document
            Scanner s = new Scanner(file);
            int count = 0;


            // Scans each line and places the value into the array list
            while (s.hasNextLine()) {
                int input = s.nextInt();
                answer.add(input);
            }

            // Kaboom
            System.out.println(answer);
            System.out.println(answer.indexOf(1));
            System.out.println(answer.indexOf(2));
            System.out.println(answer.indexOf(3));
            System.out.println(answer.indexOf(4));
            System.out.println(answer.indexOf(5));
            System.out.println(answer.indexOf(6));
        }

    }