编码一个简单的HiLo纸牌游戏,用户从一副纸牌中获得卡值,然后输入“更高”,“更低”或“相等”,试图猜测下一张牌的下限。
真的无法通过迭代来了解用户输入验证,即。在输入具有所需参数的字符串之前不要继续前进。
到目前为止我的代码:
import java.util.Scanner;
import java.util.Random;
public class HiLoGame {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
Random randomCard = new Random();
int numberOfSuccesses = 0;
boolean finished = false;
int card = (randomCard.nextInt(13) + 2);
while (finished != true) {
int nextCard = (randomCard.nextInt(13) + 2);
String pictureCard = "";
if (((numberOfSuccesses < 0) ? nextCard : card) == 11) {
pictureCard = "Jack";
} else if (((numberOfSuccesses < 0) ? nextCard : card) == 12) {
pictureCard = "Queen";
} else if (((numberOfSuccesses < 0) ? nextCard : card) == 13) {
pictureCard = "King";
} else if (((numberOfSuccesses < 0) ? nextCard : card) == 14) {
pictureCard = "Ace";
}
System.out.println("The card is a " + ((card > 10) ? pictureCard : card));
if (numberOfSuccesses == 4) {
System.out.println("Congratulations. You got them all correct");
finished = true;
break;
}
while (!reader.nextLine().toLowerCase().equals("higher")
|| !reader.nextLine().toLowerCase().equals("lower")
|| !reader.nextLine().toLowerCase().equals("equal")) {
System.out.println("Try again!");
reader.next();
}
String userGuess = reader.nextLine().toLowerCase();
//TODO validate input
if (userGuess.equals("higher")) {
if (nextCard > card) {
numberOfSuccesses++;
} else {
finished = true;
break;
}
} else if (userGuess.equals("lower")) {
if (nextCard < card) {
numberOfSuccesses++;
} else {
finished = true;
break;
}
} else if (userGuess.equals("equal")) {
if (nextCard == card) {
numberOfSuccesses++;
} else {
finished = true;
break;
}
}
System.out.println(numberOfSuccesses);
card = nextCard;
}
if (numberOfSuccesses < 4) {
System.out.println("Sorry, incorrect!");
}
}
}
及相关代码摘录:
while (!reader.nextLine().toLowerCase().equals("higher")
|| !reader.nextLine().toLowerCase().equals("lower")
|| !reader.nextLine().toLowerCase().equals("equal")) {
System.out.println("Try again!");
reader.next();
}
它有点卡在上面的部分给“再试一次”和。我已经完成了必须使用.hasNextInt()的程序,但我正在努力进行这种字符串验证。
感谢您提供的所有帮助/意见!
答案 0 :(得分:1)
您最多呼叫reader.nextLine()
3次,因此您正在比较3种不同的字符串。
如果我输入“xxx”,你的代码会说“xxx!=更高,所以读另一行” - 它永远不会将“xxx”与“lower”或“equal”进行比较。
另请注意&&
vs ||
。
解决方案是将一行读入变量并对每个条件使用该变量。我不会写出来,因为这显然是家庭作业或自学练习,所以最好自己动手。
答案 1 :(得分:0)
我认为你的条件逻辑需要改变。您正在检查输入是否等于&#34;更高&#34;或不等于&#34;更低&#34;或不等于&#34;等于&#34;因此,即使您输入预期值,它也总是错误的 - 如果您输入&#34;更高&#34;它不等于低。您需要将ors更改为ands。