【问题标题】:Random number generator with user input code doesn't work correctly带有用户输入代码的随机数生成器无法正常工作
【发布时间】:2018-01-06 21:28:58
【问题描述】:

我的另一个初学者问题。我提前道歉,但你能帮我吗?所以我想创建这个随机数生成器,它将生成数字 1-100 并要求用户输入。用户应该猜测直到他最终得到正确的数字。最后,程序应该打印“you guessed from xx attempt”。所以问题是,当我测试代码时,两次运行正确,另外两次错误(尝试次数显示错误)。现在我也觉得代码可以用更好的方式编写,但不知道具体如何。谢谢

import java.util.Scanner;
import java.util.Random;
public class JavaApplication2018 
{
    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a number, please");
        int attempt = input.nextInt();
        Random dice = new Random();
        int number;
        number = dice.nextInt(100) + 1;
        int counter = 0;
       while (number > attempt) 
       {
           System.out.println("I imagined a bigger number. Guess again!");
           attempt = input.nextInt();
           counter++;
       }

       while (number < attempt)
       {
           System.out.println("I imagined a smaller number. Guess again!");
           attempt = input.nextInt();
           counter++;
       }

       if (number == attempt)
       {

           counter++;
       }


       System.out.println("You guessed from " + counter +". attempt" );

    }  


}

【问题讨论】:

    标签: java random


    【解决方案1】:

    用户猜测一次,如果大于随机数,则再次迭代,如果不是,则在第二次迭代,如果猜测再次大于尝试,则为否很好,代码将没有你想要的结果结束。

    while (number > attempt || number<attempt) 
           {
            if(number>attempt){
               System.out.println("I imagined a bigger number. Guess again!");}             
            else
               System.out.println("I imagined a smaller number. Guess again!");
    
            attempt = input.nextInt();
            counter++;
           }
    if (number == attempt)
       {
    
           counter++;
       }
    
    
       System.out.println("You guessed from " + counter +". attempt" );
    
    }  
    

    这段代码应该更好

    【讨论】:

    • 太好了,非常感谢!你的循环看起来好多了,而且效果很好,谢谢
    • 很高兴它成功了!你理解逻辑错误吗?因为如有必要,我很乐意再次解释
    • 我想我明白了。我认为我不应该有两个单独的 while 循环,因为计算机检查第一个,如果它是真的,再试一次,如果不是,那么检查另一个,然后停止。不会回到第一个,而是停下来。这就是错误,对吧?
    • 你能帮我解决一些问题吗,我刚刚发现我现在还有另一个疑问。在您的代码中,else 语句实际上可以包含数字等于尝试的情况(因为“else”本身意味着除 if 语句中包含的情况之外的任何其他情况,对吗?所以基本上如果数字等于尝试,它将不会进入下一个if 语句,但会在那里结束,对吗?还是我错了?
    • 是的,我还没想过。如果是这样,则添加 if(number
    【解决方案2】:

    首先,您不需要两个while。您可以将它们放在一个 while 中,然后像这样在其中放置一个 if

    while(number ! attempt){
    if(number > attempt)
    ...
    else
    ...
    }
    System.out.println("good gusse" );
    

    其次,我需要更多有关错误的详细信息,然后才能帮助您修复它

    【讨论】:

    • 所以两次,我得到了正确的尝试次数,另外两次我检查了代码,它显示了错误的尝试次数。
    【解决方案3】:

    用户引入第一个输入,然后进入一个无限循环,在该循环中将要求用户输入数字,直到最终猜出该值。此代码仅检查用户引入的值的最大值 2 倍。如果有帮助,请选择作为答案:D

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a number, please");
        int attempt = input.nextInt();
        int number;
        number = new Random().nextInt(101);
        int counter = 1;
    
        while (true) {
    
            attempt = input.nextInt();
            counter++;
    
    
            if (number > attempt) {
    
                System.out.println("I imagined a bigger number. Guess again!");
    
            }else if (number < attempt) {
    
                System.out.println("I imagined a smaller number. Guess again!");
    
            }else {
    
                System.out.println("You guessed from " + counter + ". attempt");
                break;
    
            }
    
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      相关资源
      最近更新 更多