java - Java - 围绕 for 循环进行迭代以创建游戏玩家并设置他们的名字
问题描述
我已经很久没有编程了,我花了几个小时试图让这种方法来做我需要的事情,所以在这一点上非常感谢帮助。我正在创建一个棋盘游戏,它会提示玩家玩的玩家数量,然后依次提示他们输入他们的名字,这些新玩家将被创建并设置/存储他们的名字。我还想确保两个玩家不能有相同的名字。
这是我的播放器课程的一部分:
public class Player {
private String name;
private int currentPosition;
private int distance;
private boolean quit;
public Player() {
}
public Player(String name, int currentPosition, int distance, boolean quit) {
this.name = name;
this.currentPosition = currentPosition;
this.distance = distance;
this.quit = quit;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我有一个 setNumberOfPlayers 方法,它工作正常,并且在调用 getNumberOfPlayers() 时获得正确的玩家数量。
public class SetUpGame {
Scanner sc = new Scanner(System.in);
public void addPlayers() {
String playerName;
ArrayList<Player> players = new ArrayList<Player>();
System.out.println("What are the names of the " + this.numberOfPlayers + " players?\n");
for (int loop = 1; loop <= getNumberOfPlayers(); loop++) {
System.out.println("Player " + loop + " please enter your name");
boolean valid = false;
do {
playerName = sc.nextLine();
Player player = new Player();
for (Player play : players) {
if (players.isEmpty() || !play.getName().equalsIgnoreCase(playerName)) {
player.setName(playerName);
players.add(player);
System.out.println("success, your name is: " +playerName);
valid = true;
} else {
System.out.println("please enter another name");
valid = false;
}
}
} while (valid == false);
}
sc.close();
}
当从 main 调用 add player 方法时,它会给出以下输出:
What are the names of the 2 players?
Player 1 please enter your name
...并且用户可以输入他们的名字,但扫描仪永远不会关闭或循环询问下一个玩家他们的名字。我已经把代码弄得乱七八糟了,以至于我现在把自己弄糊涂了。任何人都可以帮助解决这个问题,以及如何验证/检查玩家是否已创建并设置了他们的名字?谢谢
解决方案
您的内部 for 循环正在迭代玩家数组,但它是空的。
也许试试这个:
do {
System.out.println("Please enter name:");
playerName = sc.nextLine();
if(playerName.length()!=0){
valid = true;
for(Player play : players)
if(play.getName().equalsIgnoreCase(playerName))
valid = false;
if(valid){
Player player = new Player();
player.setName(playerName);
players.add(player);
}
}
} while (!valid);
我认为你可能很难调试,因为你所有的变量名都很相似。('玩家','玩家','玩')
编辑:更新以检查是否重复
推荐阅读
- qt - 如何使用 GridView 在滚动页面结束时获取刷新信号
- callback - Plotly Dash - 有时会触发回调,有时不会触发相同的回调
- javascript - 我在哪里放置我的回报真实声明
- scanf - 在 x86-64 气体组件中使用 scanf 会产生 sigsegv
- node.js - 表示http客户端连接服务器,https客户端无法连接服务器
- tensorflow - 如何为检测到的每个对象的每个边界框赋予唯一的 ID
- android - android:layout_height="?attr/actionBarSize" 是什么意思
- tensorflow - 用更多的例子来训练判别器
- entity-framework - 如何共享 DbContexts 而不是获取 2 个用户表
- r - 在 R 中使用 system() 函数