首页 > 解决方案 > 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

...并且用户可以输入他们的名字,但扫描仪永远不会关闭或循环询问下一个玩家他们的名字。我已经把代码弄得乱七八糟了,以至于我现在把自己弄糊涂了。任何人都可以帮助解决这个问题,以及如何验证/检查玩家是否已创建并设置了他们的名字?谢谢

标签: javafor-loopoopjava.util.scannerdo-while

解决方案


您的内部 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);

我认为你可能很难调试,因为你所有的变量名都很相似。('玩家','玩家','玩')

编辑:更新以检查是否重复


推荐阅读