制作一个程序,其程序可以在程序过程中发生变化(Java)

时间:2014-11-19 01:27:47

标签: java random range

我正在开发一个项目,您可以在其中创建一个计算机猜测随机数的代码,然后用户说该数字是高还是低。然后计算机应根据用户的说法改变其参数。例如,如果它猜测33并且你说太低而它说74并且它说得太高,则生成的下一个数字将在33到74之间。我的问题是,我可以使用rFinder变量使范围变得更高例如,当RepeatedGuess方法中的UserAnswer = 2时。但是,虽然尝试了很多东西,但我无法获得动态范围或整个代码中的变化。我完全错误地接近这个吗?任何建议都会有所帮助。

import java.util.Scanner;
import java.util.Random;

public class Proj72 {

  private static int UserAnswer;
  private static int maximum = 100;
  private static int minimum = 0;

  private static int rFinder;
  private static Random generator = new Random();
  private static Scanner reader = new Scanner(System.in);
  private static int guess = generator.nextInt(100);
  public static void main(String[] args) {
    FirstGuess();
    RepeatedGuesses();
    Correct();
  }

  private static void FirstGuess() {
    System.out.print(guess + ": Is this your number? Enter 1 For Yes or enter 2 for Too Low or enter 3 for Too High:");
  }

  private static void RepeatedGuesses() {
    while (1 != UserAnswer) {
      UserAnswer = reader.nextInt();
      if (2 == UserAnswer) {
        rFinder = (int)(generator.nextInt(100 - guess));
        guess = rFinder + guess;
        System.out.print(guess + ": Is this your number? Enter Yes or enter Higher or enter Lower:");
      } else if (3 == UserAnswer)
        break;
    }
  }

  private static void Correct() {
    if (1 == UserAnswer) {
      System.out.print("I got it!");
    }
  }
}

2 个答案:

答案 0 :(得分:0)

private static void RepeatedGuesses() {
        while (1 != UserAnswer) {
            UserAnswer = reader.nextInt();
            if (2 == UserAnswer) {
                rFinder = (int) (generator.nextInt(100 - guess));
                guess = rFinder + guess;
                System.out.print(guess + ": Is this your number? Enter Yes or enter Higher or enter Lower:");
            } else if (3 == UserAnswer){
                break;
            }
            //change it
            FirstGuess();
            UserAnswer = reader.nextInt();
        }
    }

答案 1 :(得分:0)

跟踪猜测可能的值范围。称这些最小和最大。 Min等于0,max在开头等于100.

猜猜random int between the min and max

每次猜测后:

  • 如果数字高于猜测值,则将min设置为guess
  • 如果数字低于猜测值,请将最大值设置为猜测

为了进一步发展,不是每次都选择随机猜测,而是猜测最小值和最大值中间的值,例如: 50为第一次猜测。 这是一个二进制搜索,其中O(log(N))最差和平均时间!