使用随机生成的数字

时间:2018-04-05 09:16:28

标签: java arrays

我正在尝试编写一个程序,将国家和大都市存储在两个独立的阵列中,然后让用户根据资本猜测国家。用户可以输入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

4 个答案:

答案 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语句无关。 要修复它,请在条件后直接删除冒号。

也是一些一般性建议。你的代码有很多重复。这看起来像是家庭作业,但在实际系统中,这会增加进行更改所需的工作量,并增加将来出错的变化。例如,您正在打印消息"您的答案是正确的"多次。如果您希望将来更新该消息,则需要在多个位置更改它。您还可能会错过其中一个需要更改的地方。