2015-05-29 80 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++) {