我正在尝试创建一个得分系统并获得最高分,但是我的方法会生成一个IndexOutOfBoundsException,但是我无法找到arraylist界限中的某些人可以帮助我吗?
代码:
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;
}
该方法是静态的,因为其他方法和变量也是静态的
答案 0 :(得分:1)
您错误地使用了i
和p
!
在循环中,将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 :(得分:1)
少数事情:
i
p
变量!=
来检查for-loop
(通常)此:
for(int p = 0; p != arena.getAPlayers().size() - 1; i++) {
// ^ ^ ^ different
// ^ != WROOOONG!!!
不是一个好的for循环定义。为了避免IndexOutOfBoundsException
以这种方式使用它
for(int i = 0; i < arena.getAPlayers().size(); i++) {
答案 2 :(得分:0)
使用:
for(int p = 0; p < arena.getAPlayers().size(); p++) {
而不是
for(int p = 0; p != arena.getAPlayers().size() - 1; i++) {