开发者

Trouble with while loop and storing data

I开发者_C百科 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 i before the array store. So when you come to the fourth line, you're trying to use fill[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 int from each of those lines.


I analyzed your problem. What you are trying to inside while loop,fileScan.next() you save in line(Scanner reference).There are 4 lines in your Data.txt. Therefore fileScan.next is possible only 4 times. At the end of each loop you print filescan.nextInt(),but at the end of 4th loop it doesn't have next line to print nextInt so it gives error. And also you have to increment i at the end of while loop otherwise it saves start from fill[1].


You can use the following code. May be it may be useful for you.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜