所以最近我发布了一个关于我的《Higher and Lower》游戏的问题,它到处都是而且不起作用,我在这个游戏中采取了另一种方法,并且它起作用了,这次只是一个小问题,显示比解释更容易,这是我的代码:
String noReplay = "\nThank you for playing.";
String highLow = "(H)igher or (L)ower: ";
String loseHigh = "Card is higher, you lose. Would you like to play again? Y/N: ";
String loseLow = "Card is lower, you lose. Would you like to play again? Y/N: ";
String playAgain;
boolean replay = false;
Random rand = new Random();
Scanner scan = new Scanner(System.in);
do {
int card1 = rand.nextInt(13) + 1;
int card2 = rand.nextInt(13) + 1;
System.out.println("Card is: " + card1);
System.out.printf(highLow);
String guess = scan.nextLine().toUpperCase();
if(card2 > card1 && guess.equalsIgnoreCase("H")) {
System.out.println("Card is: " + card2);
System.out.printf(highLow);
replay = true;
guess = scan.nextLine().toUpperCase();
}
else if(card2 > card1 && guess.equalsIgnoreCase("L")) {
System.out.println("Card is: " + card2);
System.out.printf(loseHigh);
playAgain = scan.nextLine().toUpperCase();
if(playAgain.equalsIgnoreCase("Y")) {
replay = true;
}
else if(playAgain.equalsIgnoreCase("N")) {
replay = false;
System.out.println(noReplay);
}
}
else if(card2 < card1 && guess.equalsIgnoreCase("H")) {
System.out.println("Card is: " + card2);
System.out.printf(loseLow);
playAgain = scan.nextLine().toUpperCase();
if(playAgain.equalsIgnoreCase("Y")) {
replay = true;
}
if(playAgain.equalsIgnoreCase("N")) {
replay = false;
System.out.println(noReplay);
}
}
else if(card2 < card1 && guess.equalsIgnoreCase("L")) {
System.out.println("Card is: " + card2);
System.out.printf(highLow);
replay = true;
guess = scan.nextLine().toUpperCase();
}
} while(replay != false);
我的项目的目的是创建一个简单的游戏,当用户输入上面的卡号的较高或较低时,程序将给出正确的答案,或者从该阶段重玩游戏,或者询问用户是否愿意再次玩,因为失败了。
这工作正常,但是从我的输出来看:
Card is: 9
(H)igher or (L)ower: h
Card is: 11
(H)igher or (L)ower: l
*Card is: 6*
*(H)igher or (L)ower: l*
*Card is: 7*
Card is higher, you lose. Would you like to play again? Y/N: y
*Card is: 13*
*(H)igher or (L)ower: h*
*Card is: 10*
(H)igher or (L)ower:
我们可以在星号行上看到,它没有做它应该做的事情。 当我说更高时,如果数字更低,它应该问我是否想再玩一次,因为我错了。在这种情况下不是吗?
这就是我的问题^
另一件事是,我想请求输入检查器的帮助,我只希望用户能够输入 Y、N、H、L(我已经解决了小写或大写问题) .
感谢您的阅读!
最佳答案
这应该是有意义的,并有助于降低游戏的复杂性。看看我对卡 1 与卡 2 的比较,您希望您的猜测基于卡 2 与卡 1 的比较,而不是相反。如果这是有道理的。希望这可以帮助!
String highLow = "(H)igher or (L)ower: ";
String loseHigh = "Card is higher, you lose.";
String loseLow = "Card is lower, you lose.";
String loseMessageDetails = "";
boolean gameLost = false;
boolean askAgain = true;
Scanner scan = new Scanner(System.in);
String guess = "";
Random rand = new Random();
int card1;
int card2;
while(askAgain)
{
if(gameLost)
{
System.out.println(loseMessageDetails + "\nWould you like to play again? Y/N");
guess = "";
while(!guess.equals("Y") && !guess.equals("N"))
{
guess = scan.nextLine().toUpperCase();
}
if(guess.equals("Y"))
{
gameLost = false;
askAgain = true;
}
else
{
askAgain = false;
}
}
if(!gameLost)
{
card1 = rand.nextInt(13) + 1;
card2 = rand.nextInt(13) + 1;
System.out.println("Card is: " + card1);
guess = "";
//loop until correct type of input
while(!guess.equals("H") && !guess.equals("L"))
{
System.out.printf(highLow);
guess = scan.nextLine().toUpperCase();
}
//now we either correctly guessed or incorrectly guessed
//here is a correct guess
if((card1 < card2 && guess.equalsIgnoreCase("H")) ||
(card1 > card2 && guess.equalsIgnoreCase("L")))
{
askAgain = true;
}
else
{
loseMessageDetails = guess.equalsIgnoreCase("L") ? loseHigh : loseLow;
gameLost = true;
}
}
}
这还将确保仅输入有效的内容,并继续要求输入,直到用户输入正确的字母。
关于java - 修复我的循环并需要输入检查器、Java 方面的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40662722/