I need to get a while loop to read 6 int values at each repetition and store it in an int local variable. I attempted something like the code below which throws an error. I also tried to change the array size however it still doesnt seem to work.
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);
}
}
The Error
> 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)
>
Can someone help me fix this and explain to me why?
Also the Data.txt contains
1 1 20 30 40 40
0 2 80 80 50 50
0 3 150 200 10 80
1 1 100 100 10 10
You’re creating an array of size 4, and you’re storing values in there for as many values as there are input lines. Except you’re actually starting with array index 1, because you’re incrementing
ibefore the array store. So when you come to the fourth line, you’re trying to usefill[4]which throws the exception you’ve seen.Given that your code doesn’t know how many lines there will be, I’d suggest using a
List<Integer>instead of an array.You’re also not reading 6 int values from each line – you’re reading each line, and then parsing the first
intfrom each of those lines.