2016-04-20 12 views
0

Also habe ich diesen Code ... und so sieht ein Teil davon aus.Fragen zu einer ArrayIndexOutOfBoundsException?

File File = new File("data2.txt"); 
    Scanner readUpdate = new Scanner(File); 
    Player[] updatePlayers = new Player[200]; 
    String updateSTR; 
    int updateTotalCounter = 0; 
    while (readUpdate.hasNext()) { 

     updateSTR = readUpdate.nextLine(); 
     String [] updateData = updateSTR.split(","); 
     updatePlayers[updateTotalCounter] = new Player(updateData[0], updateData[1],updateData[2], 
       Integer.parseInt(updateData[3]), Integer.parseInt(updateData[4])); 

     updateTotalCounter++; 

    } 

    readUpdate.close(); 

Java hält kommen und mir zu sagen, dass

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 
    at Main.main(Main.java:43) 

Ich verstehe nicht, was das bedeutet. Irgendwelche Hinweise??

+4

Es gibt mindestens eine Zeile in der Datei, die hat nur 4 Spalten (nicht 5). –

+0

@Megan poste bitte deine Datei data2.txt – SkyWalker

+5

Mögliches Duplikat von [Was verursacht eine java.lang.ArrayIndexOutOfBoundsException und wie verhindere ich sie?] (Http://stackoverflow.com/questions/5554734/what-causes-a- java-lang-arrayindexoutofboundexception-and-how-do-i-prevent-it) –

Antwort

2

Das bedeutet, dass Sie versuchen, auf eine Position in Ihrem Array zuzugreifen, die größer ist als die Anzahl der Elemente im Array, sodass Sie diese häufige Ausnahme erhalten.

Sie nehmen an, dass das Array updateData 5 Positionen für jede Zeile hat, die Sie lesen, und das scheint für mindestens eine der Zeilen falsch zu sein, und so wird die Ausnahme ausgelöst.

Stellen Sie sicher, dass

String [] updateData = updateSTR.split(",");

Ist Größe 5 (0-4) für alle Zeilen. Lösen Sie das Problem auf diese Weise, aber feststellen, dass einige der Linien werden nicht bearbeitet:

File File = new File("data2.txt"); 
    Scanner readUpdate = new Scanner(File); 
    Player[] updatePlayers = new Player[200]; 
    String updateSTR; 
    int updateTotalCounter = 0; 
    while (readUpdate.hasNext()) { 

     updateSTR = readUpdate.nextLine(); 
     String [] updateData = updateSTR.split(","); 
     if (updateData.lenght < 5) { 
      // invalid line format... print any message... 
     } else { 
      updatePlayers[updateTotalCounter] = new Player(updateData[0], updateData[1],updateData[2], 
       Integer.parseInt(updateData[3]), Integer.parseInt(updateData[4])); 

      updateTotalCounter++; 
     } 

    } 

    readUpdate.close(); 
0

besser die Länge des Arrays zu überprüfen,

String [] updateData = updateSTR.split(","); 
if(updateData.length > 4){ 
     updatePlayers[updateTotalCounter] = new Player(updateData[0], updateData[1],updateData[2], 
       Integer.parseInt(updateData[3]), Integer.parseInt(updateData[4])); 
}