public static void main(String[] args){
........................
for(int i = 0; i<play.size(); i=i+1){
System.out.println("the Winner is; " +Winners(play).get(i).name);
}
}
这是主要方法。我没有在这里写下一切,因为它是不必要的。基本上我在做什么,就是我正在调用以
Winners
作为参数的ArrayList<Game>
方法。 play
是ArrayList<Game>
类型。在此,我想获取存储在其中的元素并获取其名称。以便在屏幕上显示获奖者的姓名。我之所以循环它,是因为可以有几个赢家。取决于多少个分数相同。private static ArrayList<Game> Winners(ArrayList<Game> gamers){
ArrayList<Game> winner = new ArrayList<Game>();
for(int i = 1; i==gamers.size(); i=i+1){
if(gamers.get(i).getPoints()>gamers.get(i-1).getPoints()){ winner.clear();
winner.add(gamers.get(i));
}
else if(gamers.get(i).getPoints()<gamers.get(i-1).getPoints()){ winner.clear();
winner.add(gamers.get(i-1));
}
else if(gamers.get(i).getPoints()==gamers.get(i-1).getPoints()){ winner.clear();
winner.add(gamers.get(i));
winner.add(gamers.get(i-1));
}
}
return winner;
}
Winners
方法返回一个Arraylist<Game>
,这是存储得分最高的一个或多个游戏者的位置。我循环遍历每个
gamers
,并将它们的points
相互比较。得分最高的人将存储在Winner
数组列表中。我总是在某些元素进入内部时清除
winner
数组列表,因为我只希望将最上面的点存储在那里。我的问题是,我不知道自己是否正确。因为我遇到了错误
在
System.out.println("the Winner is; " +Winners(play).get(i).name);
上。它说索引0大小为0(indexoutofboundsexception)
最佳答案
for(int i = 1; i==gamers.size(); i=i+1)
这意味着当
i==gamers.size()
为假时,循环将终止。当i = 1时第一次出现,但是gamers.size()大于1。它永远不会进入循环。并返回空列表。当您尝试从一个空列表中获取一个元素时,您将获得异常。但我认为您想检查
i < gamers.size()
。有可能:for(int i = 1; i < gamers.size(); i++)
同样,在每个if块中都不需要
winner.clear()
。相反,您可以:private static ArrayList<Game> Winners(ArrayList<Game> gamers) {
ArrayList<Game> winner = new ArrayList<Game>();
for (int i = 1; i < gamers.size(); i++) {
winner.clear();
if (gamers.get(i).getPoints() > gamers.get(i - 1).getPoints()) {
winner.add(gamers.get(i));
} else if (gamers.get(i).getPoints() < gamers.get(i - 1).getPoints()) {
winner.add(gamers.get(i - 1));
} else { // last check when points are equal
winner.add(gamers.get(i));
winner.add(gamers.get(i - 1));
}
}
return winner;
}
N.B:您的
Winners()
方法的方法存在问题。您正在遍历gamers
并将winner
添加到列表中。但是每次您清除清单时。这意味着您只会从最后两名玩家中获胜。以前的获奖者将被清除。我认为您需要重新检查。清除列表时,
winner
列表的大小将与play
的大小不同。结果,您还将在此代码中获得异常。for(int i = 0; i < play.size(); i=i+1) {
System.out.println("the Winner is; " + Winners(play).get(i).name);
}
一种解决方法可能是:
ArrayList<Game> winnersList = Winners(play);
for(int i = 0; i < winnersList.size(); i++) {
System.out.println("the Winner is; " + winnersList.get(i).name);
}