Java 需要一种在地图上连续循环/迭代的方法吗
我正在用java构建一个游戏,我有一个玩家对象的“地图”。我有一个叫做endOfTurn的方法,当玩家想要完成他们的回合时调用它,它将“currentPlayerTurn”字段设置为地图中的下一个玩家。然而,一旦我到达我的地图的尽头,我希望它回到地图上的第一个玩家那里,一次又一次地旋转。有没有办法做到这一点?也是的,玩家的数据结构需要是一张地图Java 需要一种在地图上连续循环/迭代的方法吗,java,loops,continuous,Java,Loops,Continuous,我正在用java构建一个游戏,我有一个玩家对象的“地图”。我有一个叫做endOfTurn的方法,当玩家想要完成他们的回合时调用它,它将“currentPlayerTurn”字段设置为地图中的下一个玩家。然而,一旦我到达我的地图的尽头,我希望它回到地图上的第一个玩家那里,一次又一次地旋转。有没有办法做到这一点?也是的,玩家的数据结构需要是一张地图 public class Game { private Map<String,Player> players; private Playe
public class Game {
private Map<String,Player> players;
private Player currentPlayerTurn;
public boolean EndOfTurn(Player currentPlayerTurn) {
//need to set this.currentPlayerTurn to the next player in the Map
}
公共类游戏{
私人地图播放器;
私人玩家currentPlayerTurn;
公共布尔内接turn(Player currentPlayerTurn){
//需要将this.currentPlayerTurn设置为地图中的下一个玩家
}
我研究过使用迭代器,但它似乎没有重置功能或“循环”模式。有什么想法吗?我认为最简单的选择是:
while (!done) {
// iterate once around your list
}
如果你的玩家需要被关在地图中
,那么我不会通过引入新的结构来使事情复杂化
你可能想考虑的是,如果一个球员又转了一圈,会发生什么(这会发生吗?)如果是这样的话,迭代器将不是一个天生的适合对象,也许你需要某种
TurnManager
对象来选择下一个玩家。我不会试图将游戏的行为与容纳玩家的数据结构联系起来,而是将其抽象成一个明确知道如何处理的组件。通常,你会ld有一个外部循环,它迭代调用此方法的玩家
while(playingGame) {
for(Player player: players.values()) {
player.takeTurn();
endOfTurn(player);
}
}
你总是可以从映射中创建一个新的迭代器。我的意思是,“重置”迭代器的方法就是创建一个新的迭代器
Iterator<Map.Entry<String,Player>> it = players.entrySet().iterator();
//...
if(!it.hasNext())
it=players.entrySet().iterator()
Iterator it=players.entrySet().Iterator();
//...
如果(!it.hasNext())
it=players.entrySet().iterator()
让我试试
public class Game {
private Map<String,Player> players;
private Player currentPlayerTurn;
private Iterator<Map.Entry<String,Player>> itPlayers;
public boolean EndOfTurn(Player currentPlayerTurn) {
if(itPlayers == null || !itPlayers.hasNext()){
itPlayers=players.entrySet().iterator();
}
currentPlayerTurn=itPlayers.next().getValue();
}
}
公共类游戏{
私人地图播放器;
私人玩家currentPlayerTurn;
私有迭代器;
公共布尔内接turn(Player currentPlayerTurn){
if(itPlayers==null | |!itPlayers.hasNext()){
itPlayers=players.entrySet().iterator();
}
currentPlayerTurn=itPlayers.next().getValue();
}
}
您可以创建类似于链表节点的结构。如果一轮结束,endOfTurn()将返回true,否则将返回false
Player {
String name;
boolean dealer;
Payer nextPlayer;
// constructor, getters and setters for fields
}
public class Game {
private Map<String,Player> players;
private Player currentPlayerTurn;
public boolean endOfTurn(Player currentPlayerTurn) {
currentPlayerTurn = currentPlayerTurn.getNextPlayer();
if(currentPlayerTurn.isDealer())
return true;
else
return false;
}
播放器{
字符串名;
布尔经销商;
付款人下一层;
//字段的构造函数、getter和setter
}
公开课游戏{
私人地图播放器;
私人玩家currentPlayerTurn;
公共布尔内接turn(Player currentPlayerTurn){
currentPlayerTurn=currentPlayerTurn.getNextPlayer();
如果(currentPlayerTurn.isDealer())
返回true;
其他的
返回false;
}
你需要一个循环链接列表。LinkedHashMap
可以做这项工作,它保持了你进入玩家的顺序。循环链接列表可以工作,但我需要它是一个地图。我知道他已经尝试过了,但它没有他想要的循环行为。他写道:“我已经考虑过使用迭代器,但这似乎没有什么效果。”重置“循环”模式