我正在尝试编写一个程序,将国家和大都市存储在两个独立的阵列中,然后让用户根据资本猜测国家。用户可以输入3个国家/地区,如果其中一个国家与首都匹配,则程序应打印“您的答案是正确的”声明。
我需要使用随机生成的数字来选择显示哪个大写。
我遇到的问题是无论国家是对还是错,我总是会收到不同数量的陈述,无论是正确还是错误。这就像随机数在每个if语句中都在变化。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String[] Countries = {"Greece", "Germany", "Thailand", "Netheralnds", "China", "Turkey"};
String[] Capitals = {"Athens", "Berlin", "Bangkok", "Amsterdam", "Beijing", "Ankara"};
int RandomNum = ThreadLocalRandom.current().nextInt(0, 6);
out.print("Which country has the capital " + Capitals[RandomNum] + "?\n");
out.print("Enter up to 3 names, comma-seperated: ");
String UsrCountry = input.next();
if (RandomNum == 0)
if (UsrCountry.contains("Greece")) {
out.print("Your answer is correct");
}
else {
out.print("Your answer is incorrect");
}
if (RandomNum == 1)
if (UsrCountry.contains("Germany")) {
out.print("Your answer is correct");
}
else {
out.print("Your answer is incorrect");
}
if (RandomNum == 2)
if (UsrCountry.contains("Thailand")) {
out.print("Your answer is correct");
}
else {
out.print("Your answer is incorrect");
}
if (RandomNum == 3)
if (UsrCountry.contains("Netherlands")) {
out.print("Your answer is correct");
}
else {
out.print("Your answer is incorrect");
}
if(RandomNum == 4)
if (UsrCountry.contains("China")) {
out.print("Your answer is correct");
}
else {
out.print("Your answer is incorrect");
}
if (RandomNum == 5)
if (UsrCountry.contains("Turkey")) {
out.print("Your answer is correct");
}
else {
out.print("Your answer is incorrect");
}
}
}
示例输出:
Which country has the capital Athens?
Enter up to 3 names, comma-seperated: Greece
Your answer is correctYour answer is incorrectYour answer is incorrectYour answer is incorrectYour answer is incorrectYour answer is incorrect
答案 0 :(得分:3)
你在这里有拼写错误:
if (RandomNum == 1);
if (RandomNum == 2);
//...
分号表示if块没有主体(即它什么都不做)。任何有能力的IDE都应该在你这样做时发出警告。
删除分号。我个人也建议您始终如果块阻止大括号:
if (RandomNum == 2) {
if (UsrCountry.contains("Thailand")) {
out.print("Your answer is correct");
}
else {
out.print("Your answer is incorrect");
}
}
答案 1 :(得分:0)
使用这行代码进行优化。
if (UsrCountry.contains(Countries[RandomNum])){
out.print("Your answer is correct");
}
else {
out.print("Your answer is incorrect");
}
如果使用此代码,则无需多个if-else条件。
答案 2 :(得分:0)
问题是你有if
个错误,在条件之后删除分号。
有效的if-else
是
if (RandomNum == 2) { ... } else { ... }
不是
if (RandomNum == 2); { ... } else { ... }
此外,if
语句可以替换为:
out.println("Your answer is " +
(UsrCountry.contains(Countries[RandomNum]) ? "correct" : "incorrect"));
答案 3 :(得分:0)
要使if语句起作用,必须跟随另一个语句(中间没有分号)或代码块(花括号之间的代码)。 如果if语句中的检查为true,那么它将在检查后执行代码。
问题是大多数if语句在if条件检查后直接有一个半冒号。 例如,你有
if (RandomNum == 1);
但它应该只是
if (RandomNum == 1)
语句后面的分号是在没有做任何事情的情况下关闭if语句。然后执行if语句之后的行与前一个if语句无关。 要修复它,请在条件后直接删除冒号。
也是一些一般性建议。你的代码有很多重复。这看起来像是家庭作业,但在实际系统中,这会增加进行更改所需的工作量,并增加将来出错的变化。例如,您正在打印消息"您的答案是正确的"多次。如果您希望将来更新该消息,则需要在多个位置更改它。您还可能会错过其中一个需要更改的地方。