-1

Java新手。我知道字符串是不可变的,但我不明白为什么这里的输出是这样的。

目标:我试图问用户一个问题“你想上什么课?”,用户回答。他们的答案存储在一个字符串变量 (classEntered) 中,并传递给 setClass 方法,该方法根据输入到 classEntered 的内容返回起始 HP 和起始金。

问题:当用户输入他们想要成为什么样的角色(即术士或战士)时,playerClass 会正确更新。但是输出(startingHP / startingGold)没有正确响应。

这是代码:

    class Player {

        String playerName;
        String playerClass;
        int startingGold;
        int startingHP;

        public void setName(String playerName){
            this.playerName = playerName;
        }

        public void setClass(String newClass){
            playerClass = newClass;
            if(playerClass == "Warlock"){
                startingHP = 100;
                startingGold = 25;
            }else if (playerClass == "Warrior"){
                startingHP = 150;
                startingGold = 30; 
            }
        }
    }

    public class App {

        public static void main(String[] args) {

            // practice code: if playerClass defined this way the output is correct
            Player player1 = new Player();
            player1.setName("Jordan");
            player1.setClass("Warlock");

            System.out.println("Your name is: " + player1.playerName);
            System.out.println("You're a " + player1.playerClass);
            System.out.println("Your starting HP is " + player1.startingHP + " your starting gold is " + player1.startingGold);

            Player player2 = new Player();
            player2.setName("Jorel");
            Scanner sc = new Scanner(System.in);
                    System.out.println("What class do you choose? ");
            String classEntered = sc.nextLine();
            player2.setClass(classEntered);
            System.out.println("testing " + player2.playerClass);
            //output is incorrect when playerClass defined via scanner
            System.out.println("Your name is: " + player2.playerName);
            System.out.println("You're a " + player2.playerClass);
            System.out.println("Your starting HP is " + player2.startingHP + " your starting gold is " + player2.startingGold);
        }

    }
4

1 回答 1

1

StringJava 中的 s 区分大小写。当你的玩家输入他的类时,他必须完全按照你在setClassAPI 中比较它的方式编写它。

其次,您必须使用equals方法来比较字符串内容。

if(playerClass.equals("Warlock"))
{
    startingHP = 100;
    startingGold = 25;
}
else if (playerClass.equals("Warrior"))
{
    startingHP = 150;
    startingGold = 30; 
}

在您的代码中,代码没有进入 IF 语句的两个分支。

更多的:

  • 为您的类使用常量,甚至使用单独的类/枚举。
  • 为您的 HP 和 Gold 制作 setter 和 getter。尊重封装。
  • 确保告诉用户一个类不存在,例如,如果他输入“elf”。
  • 要使您的类不区分大小写,请使用equalsIgnoreCase比较字符串,而不是equals
于 2013-10-07T16:20:39.530 回答