【问题标题】:Guessing game range猜谜游戏范围
【发布时间】:2015-04-15 10:24:23
【问题描述】:

我完成了我的课堂作业,除了一件事还想不通。 如何使程序只允许 1 到 100 范围内的数字?如果用户输入一个小于 1 或大于 100 的数字,它应该告诉用户该数字超出范围。

我设置了一个随机类和一个 while 循环,它接受输入并告诉用户数字太高或太低。如果数字正确,则显示您赢得按摩。一切正常,但只有范围部分。 导入 java.util.Scanner; 导入 java.util.Random;

公共类 GuessingGame {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here

    Random generator = new Random(); 
    int numberToGuess = 1 + generator.nextInt(100);
    int numberOfTries = 0;

    Scanner input = new Scanner (System.in);
    int guess;
    boolean win = false;


    System.out.println("You have 10 tries to guess a number between 1 and 100");

    while(!win && numberOfTries < 10)
    {
    System.out.println("Guess a number: ");
    guess = input.nextInt();

    if (guess < 1 || guess > 100)
    {
    System.out.println("Guess is out of range!");
    continue; 
    }


    if (guess == numberToGuess) 
    {
        win=true;
    }

    else if (guess < numberToGuess)
            {
            System.out.println("Your guess is too low");
            }
    else if (guess > numberToGuess)
            {
            System.out.println("Your guess is too high");
            }

    }

    System.out.println("You win!");
    System.out.println("The number was " + numberToGuess);
    System.out.println("It took you " + numberOfTries + " tries." );


}

} - 我添加了其余的代码 -

但是如果我输入像 -1 或 101 这样的数字,程序会说数字太高或数字太低,忽略超出范围的语句。想不通为什么。 请你帮助我好吗? 谢谢

【问题讨论】:

  • 你是否在 "break;" 的末尾漏掉了一个 } ?
  • 旁注:最好写!win而不是win == false
  • 这不是你的真实代码。 Java 中没有If。请发布更忠于您的真实代码的内容。
  • 另外我希望If 是问题中的错字,应该是if
  • “如果我输入像 -1 这样的数字 [...] 程序会说 [...] 数字太低”... 这不是你想要的吗?

标签: java


【解决方案1】:

好吧,break 将使程序退出while 循环,而没有任何机会再次输入数字。请改用continue

【讨论】:

  • 不,它不会退出程序,而是显示数字过高或过低等消息。所以break: 就像continue;。我希望它使程序退出,这样我就可以知道问题出在哪里。 :(
  • 嗯,很难知道该程序中到底发生了什么,看到@ebyrock 没有发布整个代码,而只是其中的一部分。如果输入小于 1 或大于 100 的数字,break 将结束 while 循环。正如 Michał Szydłowski 正确指出的那样,continue 将是这里的正确选择,因为您希望用户能够再次尝试和猜测。此外,numberOfTries++ 应在检查数字是否在所需范围内之后写入,否则您也会计算无效猜测。
  • @Sky 我添加了其余代码。如果我使用 continue; 没关系,仍然得到相同的结果。这是我的输出:run: You have 10 tries to guess a number between 1 and 100 Guess number 1: 120 Your guess is too high Guess number 1:
  • @epyrock 谢谢。我看了看并在您的代码中写了一些修复的答案。请尝试一下。并注意运行正确的代码。您编写了输出状态Guess number 1:,您在此处发布的代码不会打印出来。只是为了确保您实际运行的是您认为正在运行的代码。
【解决方案2】:

break关键字用于退出最近的循环体,因为那是你的while循环,使用它会结束你的猜数字游戏。您想使用continue 关键字,它将立即开始循环的下一次迭代:

while(!win && numberOfGuesses < 10)
{
    System.out.println("Guess a number: ");
    guess = Integer.parseInt(input.nextLine());

    if (guess < 1 || guess > 100)
    {
        System.out.println("Guess is out of range!");
        continue; //Use this instead of break
    }

    //Rest of your code
}

【讨论】:

  • 使用 continue 并没有改变结果。我还添加了其余代码。
【解决方案3】:

我对您的代码进行了一些改进:

numberOfTries++检查有效范围后,因为你需要增加这个数字,否则10次猜测后循环不会结束。

break 当玩家获胜时,因为在这种情况下您不希望循环继续。

在循环之后,您需要检查玩家是否获胜。也有可能他猜了10次没有中奖。

我认为现在它应该可以按预期工作了。

public static void main(String[] args) {
    Random generator = new Random(); 
    int numberToGuess = 1 + generator.nextInt(100);
    int numberOfTries = 0;

    Scanner input = new Scanner (System.in);
    int guess;
    boolean win = false;

    System.out.println("You have 10 tries to guess a number between 1 and 100");

    while(!win && numberOfTries < 10)
    {
        System.out.println("Guess a number: ");
        guess = input.nextInt();

        if (guess < 1 || guess > 100)
        {
            System.out.println("Guess is out of range!");
            continue; 
        }

        // increase numberOfTries by 1 because player made another valid guess
        numberOfTries++;

        if (guess == numberToGuess) 
        {
            win=true;
            // exit the while loop because player won
            break;
        }

        if (guess < numberToGuess)
        {
            System.out.println("Your guess is too low");
        }
        else 
        {
            // guess must be > numberToGuess here
            System.out.println("Your guess is too high");
        }
    }

    if(win)
    {
        System.out.println("You win!");
        System.out.println("The number was " + numberToGuess);
        System.out.println("It took you " + numberOfTries + " tries." );
    }
    else
    {
        System.out.println("Sorry, you didn't win.");
        System.out.println("The right number was " + numberToGuess);
    }
}

【讨论】:

  • 天空,你真棒!非常感谢。它最终给出了“超出范围”的错误。我还修改了您的代码以在每次猜测中显示 numberOfTries(exp:猜测编号 1:,猜测编号 2:,......等等),我完成了我的任务。再次非常感谢天空 :)
  • 欢迎您@ebyrock。下次提示:显示更多代码。根据您在最初问题中显示的部分,无法猜测问题出在哪里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多