麻烦while循环和存储数据

时间:2011-09-26 12:19:30

标签: java

我需要一个while循环来在每次重复时读取6个int值并将其存储在int局部变量中。我试图像下面的代码抛出一个错误。我也试图改变数组大小,但它似乎仍然无法正常工作。

String fileName = "Data.txt";
int [] fill = new int [6];
try{
  Scanner fileScan = new Scanner(new File(fileName));
  int i = 0;
  while (fileScan.hasNextInt()){    
    Scanner line = new Scanner(fileScan.nextLine());
    i++;
    line.next();
    fill[i] = line.nextInt();
    System.out.println(fileScan.nextInt());
  }
}catch (FileNotFoundException e){
    System.out.println("File not found. Check file name and location.");
    System.exit(1);
  }
}

错误

> run FileApp
0
0
1
java.lang.ArrayIndexOutOfBoundsException: 4
    at FilePanel.<init>(FilePanel.java:35)
    at FileApp.main(FileApp.java:14)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:271)

>

有人可以帮我解决这个问题并向我解释原因吗?

Data.txt也包含

1 1 20 30 40 40
0 2 80 80 50 50
0 3 150 200 10 80
1 1 100 100 10 10

3 个答案:

答案 0 :(得分:2)

您正在创建一个大小为4的数组,并且您将中的值存储为与输入行一样多的值。除非您实际上以数组索引1开始,因为您在数组存储之前递增i 。所以,当你来到第四行时,你试图使用fill[4]来抛出你所看到的异常。

鉴于你的代码不知道会有多少行,我建议使用List<Integer>而不是数组。

你也从每行读取6个int值 - 你正在读取每一行,然后从每个行解析第一个 int那些台词。

答案 1 :(得分:0)

我分析了你的问题。 您在循环中尝试的内容,fileScan.next()保存在行中(扫描仪参考)。您的Data.txt中有4行。因此fileScan.next只能使用4次。在每个循环结束时,您打印filescan.nextInt(),但在第4个循环结束时,它没有下一行来打印nextInt,因此它给出了错误。 而且你必须在while循环结束时增加i,否则它会从fill [1]开始保存。

答案 2 :(得分:0)

您可以使用以下代码。可能对你有用。

String fileName = "Data.txt";
        int[] fill = new int[12];
        try
            {
                Scanner fileScan = new Scanner(new File(fileName));
                int i = 0;
                while(fileScan.hasNextInt())
                    {
                        Scanner line = new Scanner(fileScan.nextLine());
                        // System.out.println(fileScan);
                        // System.out.println(line);

                        line.next();
                        fill[i] = line.nextInt();
                        System.out.println("fill" + fill[i]);
                        // System.out.println(fileScan.nextInt());

                        i++;
                    }
            }
        catch (FileNotFoundException e)
            {
                System.out.println("File not found. Check file name and location.");
                System.exit(1);
            }