2014-11-05 4 views
1

Программа компилируется нормально, но когда я запускаю его, я получаю сообщение об ошибке, в частности это: java.lang.ArrayIndexOutOfBoundsException: 1«java.lang.ArrayIndexOutOfBoundsException: 1» Ошибка при запуске

Он получает ошибку на:

String name = array[1]; 

Я не уверен, почему.

Это код с проблемой:

 infile = new Scanner(new FileReader("EmployeeData.TXT")); 
     while(infile.hasNext()){ 
      String line = infile.nextLine(); 
      String array[] = line.split(":"); 
      String name = array[1]; 
      String id = array[2]; 
      double salary = Double.parseDouble(array[3]); 
      Employee e; 
      if (array[0].equals("s")){ 
       e = new SalariedWorker(id, name, salary);} 
      else { 
       boolean overtime = Boolean.parseBoolean(array[4]); 
       if(overtime){ 
        int maxhu = Integer.parseInt(array[5]); 
        e = new HourlyWorker(id, name, salary, maxhu); 
       } 
       else{ 
        e = new HourlyWorker(id, name , salary); 
       } 
      } 
      company.add(e); 
     } 

Для справки, это остальная часть программы:

Он читает этот текстовый файл под названием "EmployeeData.TXT":

S  Washington,George  000001  125000 
H MacDonald,Ronald  386218  7.80 true 40 
H  Walton,Samuel   268517 8.21 false 
H Thomas,David   131313 9.45 true 38 
H Sanders,HarlandDavid 277651 8.72 false 
S Baron,James   368535 310236 
+0

Практически весь этот код не нужен. Прочитайте, как сделать [минимальные, полные, проверенные примеры] (http://stackoverflow.com/help/mcve). –

+0

Обычно люди публикуют недостаточно кода ... – Grice

+0

Проблема заключается в разборе строки. Вы используете знак ':'. Но у вас его нет в вашей линии. И массив имеет только 1 элемент. Не два. 'array [1]' - второй элемент массива. Он компилируется отлично, но во время выполнения он ломается. –

ответ

4

Вы делитесь на ":" и свой текст:

S  Washington,George  000001  125000 
H MacDonald,Ronald  386218  7.80 true 40 
H  Walton,Samuel   268517 8.21 false 
H Thomas,David   131313 9.45 true 38 
H Sanders,HarlandDavid 277651 8.72 false 
S Baron,James   368535 310236 

не имеет такого характера. Таким образом, каждый массив будет иметь размер 1.

Нет смысла разделить на несуществующий персонаж, что делает меня очень любопытным, почему вы решили использовать ":". Я сам, я бы разделить на белом пространстве, "\\s+"

Как и в стороне, эта проблема очень поддается отладка либо с помощью отладчика или с некоторой printlns:

while(infile.hasNext()){ 
    String line = infile.nextLine(); 
    System.out.println("Unsplit String: " + line); 
    String array[] = line.split(":"); 
    System.out.println("Split String: " + java.util.Arrays.toString(array)); 

В любом случае, в будущем, когда вы имеют аналогичные проблемы, выясняют, что ваши переменные удерживают в момент и место ошибки, и это часто приведет вас к возникновению проблемы и, следовательно, к ее решению.

1

Это нарушение на этих линиях:

String line = infile.nextLine(); 
    String array[] = line.split(":"); 
    String name = array[1]; 
    String id = array[2]; 

Вы пытаетесь присвоить значение массива [1], чтобы назвать ... Но массив не содержит достаточное количество элементов.

Итак, скажите, что у вас есть line = "hey", и вы вызываете split on line, ваш массив будет иметь длину 1, так как для разделения не существует символа «:».

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