java 未打印正确猜测的打印语句[已关闭]

1wnzp6jl  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(155)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

2天前关闭。
Improve this question
我正在创建一个数字猜谜游戏,但遇到了以下问题(做,while)循环。用户将输入他们的猜测,程序将告诉他们他们的猜测是太高还是太低。如果猜测不在1和100之间,程序将提示一条消息,说只有1和100之间的数字是有效的,并且不会计入他们有限的尝试次数。代码需要使用嵌套循环。
我还没有开始工作的部分是当用户猜测正确的数字,程序打印他们的分数,或者如果他们已经用完或尝试。我如何让打印语句在用户猜测正确答案时打印?

static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        boolean keepPlaying = true;
        System.out.println("Play Guessing Game");
        int tryCount = 0;
        int counter = 9;
        while (keepPlaying) {
            boolean validInput;
            int number, playerGuess;

            number = (int) (Math.random() * 100) + 1;

            System.out.print("\nim thinking of a number between 1 and 100");
            System.out.println();

            do {
                playerGuess = sc.nextInt();

                if ((playerGuess < 1) || (playerGuess > 100)) {
                    System.out.println("Only numbers between 1 and 100   ");
                } else if (number > playerGuess && tryCount < (9)) {
                    System.out.println(" Guess higher " + " you have " + (counter) + " attempts");
                    tryCount++;
                    counter--;
                } else if (number < playerGuess && tryCount < (9)) {
                    System.out.println(" Guess lower " + " you have " + (counter - 1) + " attempts");
                    tryCount++;
                    counter--;
                } else if (number < playerGuess && tryCount == (9)) {
                    System.out.println("Guess lower" + " you have " + (counter - 1) + " attempt ");
                    tryCount++;
                    counter--;
                } else if (number > playerGuess && tryCount == (9)) {
                    System.out.println("Guess higher" + " you have " + (counter - 1) + " attempt ");
                    tryCount++;
                    counter--;
                }

            } while (playerGuess == number);

            {
                if (number == playerGuess) {
                    System.out.println("win");
                }

            }
        }
    }

}
ev7lccsx

ev7lccsx1#

Grzeskowiak先生的回答是正确的。我所能补充的是,你应该验证用户的输入。validInput不会总是正确的,特别是如果你考虑到用户可以很容易地输入1.0(双精度)或单词“seven”(字符串),这两个都不是整数。

mklgxw1f

mklgxw1f2#

这段代码中有很多错误,让我们逐一检查一下。

int tryCount = (0) + 1;

上面的代码行实际上在用户还没有猜到任何东西之前就将1赋值为tryCount
x一个一个一个一个x一个一个二个x
我不确定这个变量的意思是什么,因为它的名字没有表达它的意思。它是一个可以倒计时的最大允许尝试次数计数器吗?
在这种情况下,您可能需要将其更改为
一个三个三个一个
这个程序块将无限运行,因为你在每次循环迭代中都将值设置为false,第一次赋值true是多余的。
我不知道你到底想做什么,所以我不能推荐任何更正,对不起。它是用来告诉用户输入的是一个数字,还是正确的数字是猜测出来的?

if (playerGuess == number) {
  if (playerGuess == number && tryCount < (2)) {
    ...

这里有一个double条件,第二个条件只有在第一个条件为真时才会运行,因此第二个playerGuess == number是完全冗余的。
另外,(2)中的括号不起任何作用,您可以只写2

} else if (number > playerGuess && tryCount < (9)) {

整个条件都在if中,if询问玩家是否已经猜到了数字。在代码中的这一点上,猜到的数字总是正确的,所以这个条件总是false。您可能需要将这个和所有其他检查数字是否太高或太低的else块放在外部if块中。
在开始编程时,用伪代码写出核心逻辑往往是值得的。我也建议先把它分解成一个简单的一次猜测游戏,然后再尝试把它变成一个多次猜测游戏。下面是一个简化的一次尝试游戏的例子:

target_number = random()

// get_user_input will ask the user continuously until they type in something that is valid.
// This does not have to be a function, but in essence you want the following code to only
// run once a valid user input has been provided.
user_input = get_user_input()

if user_input == target_number:
  print("win")
  // TODO: exit game
else if user_input > target_number:
  print("too high")
else if user_input < target_number:
  print("too low")

一旦你让那部分工作了,你可以试着添加一个循环并计算尝试次数。

相关问题