2015-05-29 32 views
0

我想創建一個評分系統並獲得最佳分數,但是我的方法生成了IndexOutOfBoundsException,但我無法找到Array列表界限有什麼可以幫助我嗎?在獲取最高整數的Java - IndexOutOfBoundsException

代碼:

public static Player getBestScore(Arena arena) { 
    System.out.println(arena.getAPlayers().size()); 
    System.out.println(arena.getAPlayers().get(1).toString()); 
    int i = 0; 
    Player player = null; 
    for(int p = 0; p != arena.getAPlayers().size() - 1; i++) { 
     System.out.println(arena.getAPlayers().get(i).toString()); 
     org.bukkit.entity.Player pla = arena.players.get(i); 
     if(getArenaPlayer(pla).getScore() > i) { 
      i = getArenaPlayer(pla).getScore(); 
      player = getArenaPlayer(pla); 
     } 
    } 
    return player; 
} 

的方法是靜態的,因爲其他方法和變量都是靜態的太

+2

列出從0開始的索引像其他陣列狀結構。如果只有一個玩家,這行'System.out.println(arena.getAPlayers()。get(1).toString());'可能會有問題。 –

+1

你的for循環條件應該像(int i = 0;我

+0

@BrettWalker它不能,因爲得分systen arraylist的最小值是2 –

回答

1

您正在使用ip錯誤!
在循環中,您將i設置爲某個較高的分數,該分數可能大於數組的大小,因此IndexOutOfBoundsException異常。

public static Player getBestScore(Arena arena) { 
    System.out.println(arena.getAPlayers().size()); 
    System.out.println(arena.getAPlayers().get(1).toString()); 
    int i = 0; 
    Player player = null; 

    // index of for loop is p 
    for(int p = 0; p != arena.getAPlayers().size() - 1; i++) { 

     System.out.println(arena.getAPlayers().get(p).toString()); 
     org.bukkit.entity.Player pla = arena.players.get(p); 

     // If player's score is higher than current highscore(i) 
     if(getArenaPlayer(pla).getScore() > i) { 

      // Set current highscore(i) to this player's score 
      i = getArenaPlayer(pla).getScore(); 
      player = getArenaPlayer(pla); 
     } 
    } 
    return player; 
} 

這就是爲什麼你應該以更好的方式命名你的變量!
使用highscore而不是i,並可能index而不是p會使它不那麼混亂!

1

幾件事情:

  • 你不需要申報i循環
  • 之外你不需要p變量
  • 你souldn't使用!=來檢查for-loop(通常)

此:

for(int p = 0; p != arena.getAPlayers().size() - 1; i++) { 
// ^ ^        ^different 
//    ^!= WROOOONG!!! 

不是一個好的循環定義。爲了避免IndexOutOfBoundsException使用它以這種方式

for(int i = 0; i < arena.getAPlayers().size(); i++) { 
0

用途:用於

for(int p = 0; p < arena.getAPlayers().size(); p++) { 

代替

for(int p = 0; p != arena.getAPlayers().size() - 1; i++) {