如何生成大于或小于先前随机数的随机数?

时间:2016-11-01 02:02:01

标签: java random

我目前正在参加Java 1课程,并且为了好玩而做了一个猜数游戏。基本接收输入,告诉您它是否过高或过低,然后让您再次猜测。我认为计算机猜测也很有趣,然后将你的猜测与它进行比较。我有所有的生成和比较工作,但它继续猜测数字而不考虑更多/更少,我想添加。我有:

    public static void autoPlay(int num){
    Random rand = new Random();
    int guess1 = rand.nextInt(100) + 1;
    int counter = 0;
    while(guess1 != num){
        counter++;
        int guess = rand.nextInt(100) + 1;
        int initialHigh = 100;
        int initialLow = 0;
        // I want it to guess smart and recognize if it were too high or too low, and generate a number between there

        if(guess1 > num){   
            int newGuess = rand.nextInt(initialHigh - guess1) + 1;
        }else if(guess1 < num){
            int newGuess2 = rand.nextInt(initialLow + guess1) + 1;
        }
        initialLow = guess;
        initialHigh = guess;
        guess1 = guess;
        System.out.printf("%3d", guess1);
    }
    System.out.println("It took " + counter + " guesses to get the correct number");
}

我无法在if语句中说出我的数学有什么问题,或者只是我可以打电话来做这件事。

2 个答案:

答案 0 :(得分:0)

如果你想避免重复,那么生成适当的数字并随机播放(对于一个完整的随机函数):

List<Integer> values = IntStream.range(0, /* max */).collect(Collectors.toList());
Collections.shuffle(values);
int guesses = values.indexOf(/* some number */) + 1;

列表将完全随机排序,因此您按随机列表的顺序进行猜测,因此索引是猜测的数量(-1,因为它的0索引)

答案 1 :(得分:0)

您的代码的问题在于您只是使用随机数的相同边界。你在这里生成新的界限:

if(guess1 > num){   
            int newGuess = rand.nextInt(initialHigh - guess1) + 1;
        }else if(guess1 < num){
            int newGuess2 = rand.nextInt(initialLow + guess1) + 1;
        }

但是你根本不使用它们,你只需重复使用之前的值:

        initialLow = guess;
        initialHigh = guess;
        guess1 = guess;
        System.out.printf("%3d", guess1); 

您必须使用newGuessnewGuess2生成的值(尽管您不需要这两个变量,在if之外声明其中一个,并在其中指定一个值如果)。然后您将使用更新的值。

我还注意到您创建了许多存储相同值的变量,例如guessguess1,您不需要,只需声明其中一个并重复使用以后(所以你可以节省内存:))。

另外,我发现将initialHigh和initialLow设置为guess时出现问题,您为什么要这样做?

尝试检查您的代码逻辑并清理一些变量,其中一些变量是重复的。

但是,总而言之,我认为问题在于您正在生成新界限,但您没有使用它们。

请告诉我这是否对您有所帮助,并且记得如果它确实如此正确地选择此答案:)。如果您仍有疑问,请再次发帖。