2011-09-26 3 views
1

Мне нужно получить цикл while для чтения 6 значений int при каждом повторении и сохранить его в локальной переменной. Я попытался что-то вроде кода ниже, который вызывает ошибку. Я также попытался изменить размер массива, но он все еще не работает.Проблема с циклом while и хранением данных

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 

ответ

2

Вы создаете массив размера 4, и вы храните ценности там столько значений, сколько входные линии. Кроме того, вы на самом деле , начиная с с индексом массива 1, потому что вы увеличиваете iдо хранилище массива. Поэтому, когда вы приходите на четвертую строчку, вы пытаетесь использовать fill[4], который выдает исключение, которое вы видели.

Учитывая, что ваш код не знает, сколько строк будет, я бы предложил использовать List<Integer> вместо массива.

Вы также не чтение 6 ИНТ значения из каждой строки - вы читаете каждую строку, а затем разбор первогоint от каждой из этих линий.

+0

спасибо, что это помогает много – M1N33

0

Я проанализировал вашу проблему. Что вы пытаетесь выполнить внутри цикла while, fileScan.next(), который вы сохраняете в строке (ссылка Scanner). В вашем файле Data.txt есть 4 строки. Поэтому fileScan.next возможен только 4 раза. В конце каждого цикла вы печатаете файлыcancan.nextInt(), но в конце 4-го цикла у него нет следующей строки для печати nextInt, чтобы он выдавал ошибку. А также вам нужно увеличивать i в конце цикла while, иначе оно сохраняет начало с заполнения [1].

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

проверенных работ. большое спасибо – M1N33

Смежные вопросы