【发布时间】:2012-03-08 15:13:30
【问题描述】:
我正在编写一个围绕玩家圈子进行的纸牌游戏(就像大多数纸牌游戏一样)。播放可以向左或向右进行,并分配给布尔值。正确播放右侧,错误播放左侧。我将所有播放器对象都放在一个数组列表中,因此当我需要找到下一个将要播放的播放器时,我会获取当前播放器并将下一个播放器分配为列表中的下一个播放器。如果当前玩家是列表中的最后一个玩家,尽管我会得到一个异常说超出界限......除非我发现异常并将下一个玩家指定为列表中的第一个玩家。这是一种好的方法吗?我对如何在一个圆圈中绕过一个列表没有其他想法。谢谢。
public AbstractPlayergetNextPlayerToPlay(AbstractPlayer currentPlayer,
ArrayList<AbstractPlayer> players, boolean directionOfPlay){
AbstractPlayer nextPlayerToPlay = null;
//if the direction of play is forwards (true)
if(directionOfPlay){
for(int i=0;i<players.size();i++){
try{
if(players.get(i).equals(currentPlayer)){
nextPlayerToPlay = players.get(i+1);
}
}catch(ArrayIndexOutOfBoundsException e){
nextPlayerToPlay = players.get(0);//first player in the list
}
}
}
else{
//if the direction of play is backwards (false)
for(int i=players.size();i>0;i--){
try{
if(players.get(i).equals(currentPlayer)){
nextPlayerToPlay = players.get(i-1);
}
}catch(ArrayIndexOutOfBoundsException e){
nextPlayerToPlay = players.get(players.size());//last player in list T
}
}
}
return nextPlayerToPlay;
}
【问题讨论】:
-
使用取模运算符,例如。 (i + 1) % player.size()
-
当使用逻辑是一种选择时,我永远不会捕获异常。