2016-04-20 12 views
0

私はこのコードを持っています...そして、これはそれのセクションがどのように見えるかです。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が来ると

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

が、私はこれが何を意味するのか理解していないことを私に言って続けています。すべての手がかり?

+4

:問題をこのように固定しますが、線の一部が処理されないことに気づきます4列(5ではなく)しかありません。 –

+0

@Meganあなたのdata2.txtファイルを投稿してください – SkyWalker

+5

[何がjava.lang.ArrayIndexOutOfBoundsExceptionを引き起こすのでしょうか?それをどうやって防ぐのですか?](http://stackoverflow.com/questions/5554734/what-c​​auses-a- –

答えて

2

これは、配列内の要素の数よりも大きな配列の位置にアクセスしようとしていることを意味しています。そのため、一般的な例外が発生します。

配列updateDataには、読み込んだすべての行に対して5つの位置があり、行の少なくとも1つがfalseであると思われるので、例外がスローされます。

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

は、すべての行のためのサイズ5(0〜4)であることを確認してください。少なくとも1本のラインがそれはあなたのファイルであり

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

より良い配列の長さをチェックするために、

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])); 
}