gpt4 book ai didi

java - 输入枚举以切换语句结果

转载 作者:行者123 更新时间:2023-12-02 03:55:40 32 4
gpt4 key购买 nike

所以我在这里要求用户输入击中、站立、投降或退出的输入。我将这些作为枚举,以及 NOTVALID。

enum Decisions

{
HIT, STAND, SURRENDER, QUIT, PLAY, NOTVALID;
// NOTVALID is used to re-ask to play again
}

因此,如果用户输入“blah”而不是有效选项之一,我希望它将其视为 NOTVALID 并执行 switch 语句中用于 NOTVALID 的代码。我怎样才能做到这一点?事实上,当我运行该程序时,它返回错误:

Exception in thread "main" java.lang.IllegalArgumentException: No enum constant BlackJack.Decisions.BLAH

如何使不属于其他枚举之一的任何内容变为 NOTVALID?

System.out.println("Do you want to hit, stand, surrender, or quit?");

String decisionInput;

decisionInput = keyboard.nextLine().toUpperCase();

decision = Decisions.valueOf(decisionInput);

switch (decision)
{
case HIT:
Random playerCard = new Random();

cardPick = playerCard.nextInt(13);

playerSum = playerSum + getCardValue(cardPick);

System.out.println("Card: " + (Card.values()[cardPick]) + ". The sum of your hand is: " + playerSum + ".");

System.out.println("The hole card was " + (Card.values()[cardPick2]) + ". The house has: " + houseSum + ".");

findWinner(playerSum, houseSum, decision);

System.out.println("Do you want to play again? Type PLAY or QUIT.");

decision = Decisions.valueOf(keyboard.nextLine().toUpperCase());

break;

case STAND:
case SURRENDER:

findWinner(playerSum, houseSum, decision);

System.out.println("Do you want to play again? Type PLAY or QUIT.");

decision = Decisions.valueOf(keyboard.nextLine().toUpperCase());

break;

case QUIT:

System.out.println("Thanks for playing!");

System.exit(0);

break;

case NOTVALID:

System.out.println("Invalid input. Try again: hit, stand, surrender, or quit?");

decision = Decisions.valueOf(keyboard.nextLine().toUpperCase());

}
}
}
}

最佳答案

定义一个新方法,对于无法识别的输入返回 NOTVALID。最简洁的方法是捕获正在抛出的 IllegalArgumentException。

enum Decisions{
HIT, STAND, SURRENDER, QUIT, PLAY, NOTVALID;

public static Decisions asDecision(String input) {
try {
return Decisions.valueOf(input);
} catch(IllegalArgumentException e) {
return Decisions.NOTVALID;
}
}
}

如果这冒犯了您使用 try..catch 的敏感度,您可以自己手动执行此操作。

enum Decisions{
HIT, STAND, SURRENDER, QUIT, PLAY, NOTVALID;

public static Decisions asDecision(String input) {
for(Decisions d : values()) {
if(d.name().toLowerCase().equals(input.toLowerCase()) {
return d;
}
}
return Decisions.NOTVALID;
}
}

无论哪种方式,请改用新方法。

如果不允许定义新方法,您可以将您的作业放在 try..catch 中,如下所示:

    String decisionInput;
decisionInput = keyboard.nextLine().toUpperCase();
try{
decision = Decisions.valueOf(decisionInput);
} catch(IllegalArgumentException e){
decision = Decisions.NOTVALID;
}
// Rest of your code...

关于java - 输入枚举以切换语句结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35492257/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com