我需要一个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
答案 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);
}