2013-02-19 4 views
0

Я пытаюсь получить первую строку файла с java, и я не уверен, почему он не работает или почему я получаю ошибку, которую я получаю. Это первый раз, когда я пробовал это в java.Получение первой строки файла с java

Ошибка

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 16 
    at getSum.main(getSum.java:33) 

Код

import java.io.BufferedInputStream; 
import java.io.DataInputStream; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.File; 
import java.io.FileNotFoundException; 
public class getSum { 

    public static void main(String[] args) { 
      File file = new File("path/InputArray.txt"); 
      FileInputStream fis = null; 
      BufferedInputStream bis = null; 
      DataInputStream dis = null; 
      String line = null; 
      try{ 
       fis = new FileInputStream(file); 
       bis = new BufferedInputStream(fis); 
       dis = new DataInputStream(bis); 

       while(dis.available() != 0){ 
        line = dis.readLine(); 
       } 
      }catch (FileNotFoundException e){ 
       e.printStackTrace(); 
      }catch (IOException e){ 
       e.printStackTrace(); 
      } 
      String[] splitLine = line.split("\\s+"); 
      int[] numbers = new int[splitLine.length]; 

      for(int i = 0; i< line.length(); i++){ 
       try{ 
        numbers[i] = Integer.parseInt(splitLine[i]); 
       }catch(NumberFormatException nfe){}; 
      } 


      int amount = 0; 
      System.out.print(numbers.length); 
      /*amount = sumArray(0,numbers.length,numbers.length,numbers); 
      System.out.print("Total: " + amount);*/ 
    } 
+0

Какая линия производит эту ошибку? –

+0

@CyrilleKarmann, очевидно, имеет номер с номерами [i] = Integer.parseInt (splitLine [i]) ' –

+0

Вы пробовали запустить это в отладчике и посмотреть, как выглядят данные после разделения? –

ответ

5

Посмотрите на это:

int[] numbers = new int[splitLine.length]; 
for(int i = 0; i< line.length(); i++){ 
    try{ 
     numbers[i] = Integer.parseInt(splitLine[i]); 
    }catch(NumberFormatException nfe){}; 
} 

Вы используете i от 0 до line.length() ... который не является такой же, как splitLine.length. Я подозреваю, что вы имели в виду:

for (int i = 0; i< splitLine.length; i++) { 

В этот момент, как и numberssplitLine и имеют одинаковую длину, то вы определенно не получите ArrayIndexOutOfBoundsException.

0

Я думаю, что ваше условие цикла является неправильным. Я думаю, вы должны проверить splitLine.length().

for(int i = 0; i< splitLine.length(); i++){ 
    try{ 
      numbers[i] = Integer.parseInt(splitLine[i]); 
    }catch(NumberFormatException nfe){}; 
} 
Смежные вопросы