2014-11-20 2 views
0

Я пытаюсь создать метод split(), который читает файл по строкам, затем разделяет String и Integer s на массив, который затем записывается в другой файл. Я создал массив для хранения каждого String под названием list и один для хранения Integer с именем scores.Исключение индекса массива вне пределов, но не знаете почему?

Когда я пытаюсь запустить мой код, он достигает второго элемента массива list, который равен surname = list[1], а затем я получаю сообщение об ошибке.

То, что я пытаюсь в конечном итоге сделать, это разделить каждый элемент и получить среднее значение целых чисел, чтобы исходная строка текста читала Mildred Bush 45 65 45 67 65, и моя новая строка текста будет читать Bush, Mildred: Final score is x.xx.

ошибка происходит в строке 7 surname = list[1];

Мой код:

public void splitTest() 
{ 
    String forename, surname, tempStr, InputFileName, OutputFileName; 
    tempStr = ""; 
    String[] list = new String[6]; 
    list = tempStr.split(" "); 
    forename = list[0]; 
    surname = list[1]; 
    int[] scores = new int[5]; 
    scores[0] = Integer.parseInt(list[2]); 
    scores[1] = Integer.parseInt(list[3]); 
    scores[2] = Integer.parseInt(list[4]); 
    scores[3] = Integer.parseInt(list[5]); 
    scores[4] = Integer.parseInt(list[6]); 
    FileReader fileReader = null; 
    BufferedReader bufferedReader = null; 
    FileOutputStream outputStream = null; 
    PrintWriter printWriter = null; 
    clrscr(); 
    System.out.println("Please enter the name of the file that is to be READ (e.g. details.txt) : "); 
    InputFileName = Genio.getString(); 
    System.out.println("Please enter the name of the file that is to be WRITTEN TO (e.g. newDetails.txt) : "); 
    OutputFileName = Genio.getString(); 
    try { 
     fileReader = new FileReader(InputFileName); 
     bufferedReader = new BufferedReader(fileReader); 
     outputStream = new FileOutputStream(OutputFileName); 
     printWriter = new PrintWriter(outputStream); 
     tempStr = bufferedReader.readLine(); 
     while (tempStr != null) { 
      System.out.println(tempStr); 
      printWriter.write(tempStr+"\n"); 
      tempStr = bufferedReader.readLine(); 
     } 
     System.out.println("\n\nYOUR NEW FILE DATA IS DISPLAYED ABOVE!\n\n"); 
     pressKey(); 
     bufferedReader.close(); 
     printWriter.close(); 

    } catch (IOException e) { 
     System.out.println("Sorry, there has been a problem opening or reading from the file"); 
     e.printStackTrace(); 
    } finally { 
     if (bufferedReader != null) { 
      try { 
       bufferedReader.close();  
      } catch (IOException e) { 
       System.out.println("An error occurred when attempting to close the file"); 
      } 
     } 
     if(printWriter != null) { 
      printWriter.close(); 
     } 
    } 
} 

Где это говорит Genio, это класс, который имеет дело с пользовательского ввода.

ответ

3

Вы инициализировать list массив с

list = tempStr.split(" "); 

Размер этого массива может быть что угодно. Это зависит от количества пробелов в tempStr. Перед доступом к его элементам вы должны проверить длину list.

Если вы ожидаете, что вход содержит определенное количество параметров, добавить проверку:

list = tempStr.split(" "); 
int[] scores = new int[5]; 
if (list.length > 6) { 
    forename = list[0]; 
    surname = list[1];  
    scores[0] = Integer.parseInt(list[2]); 
    scores[1] = Integer.parseInt(list[3]); 
    scores[2] = Integer.parseInt(list[4]); 
    scores[3] = Integer.parseInt(list[5]); 
    scores[4] = Integer.parseInt(list[6]); 
} 

Это предотвратит исключение. Конечно, вы должны решить, как обращаться с ситуацией, в которой условие ложно.

EDIT:

tempStr = ""; 

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

+0

И начало отсчета в 0. .. – sivi

+0

@Eran Не могли бы вы объяснить, как? Я отредактировал мой код, чтобы объяснить, где именно я получаю ошибку. Благодарю. – DarkBlueMullet

+0

@DarkBlueMullet посмотреть мои правки – Eran