计算机猜测用户输入范围之间的数字

时间:2016-01-23 18:43:36

标签: java numbers

我正在尝试使用Java创建游戏,其中用户输入两个数字来设置范围,并且计算机必须猜测用户的数字在该范围内。

编辑:抱歉可怕的格式化!这是我的代码。我实际上已经让它工作得很好,我唯一的问题是,如果我输入两个值,比如1200和1400,当提示时,我的头号是1337.告诉程序1300太低了然后1350太高实际上导致计算机打印1275作为其第三次猜测。我想知道如何打印1300和1350(1325)的平均值作为第三次猜测,而不是打印1275.

import java.util.Scanner;

public class GuessingGame {
  public static void main(String[] args) {

  Scanner scnr = new Scanner(System.in);
  int lowerLimit = 0;
  int upperLimit = 0;
  int middleNumber = 0;
  char userInput = 'a';
  int almostLower = 0;
  int almostUpper = 0;

  System.out.println("Your number is in this range... (enter 2 numbers)");
  lowerLimit = scnr.nextInt();
  upperLimit = scnr.nextInt();
  middleNumber = (lowerLimit + upperLimit) / 2;

  almostLower = lowerLimit + 1;
  almostUpper = upperLimit - 1;

  System.out.print("Type 'h' for 'too high', 'l' for 'too low',");
  System.out.println(" and 'c' if I got it right."); //line too long

  do {
    System.out.println("Is it " + middleNumber + "?");
    userInput = scnr.next().charAt(0); 

    if (userInput == 'c') {
      System.out.println("I always win");
      break;
    }

    else if (userInput == 'h') { 

      if (middleNumber == almostLower) {
          System.out.println("Is it " + lowerLimit + "?"); 
          userInput = scnr.next().charAt(0);

          if (userInput == 'c') {
            System.out.println("I always win");
            break;
          }
      }
      else {
        middleNumber = calcMidNum(lowerLimit, middleNumber);
      }
    }

    else if (userInput == 'l') {

      if (middleNumber == almostUpper) {
        System.out.println("Is it " + upperLimit + "?"); 
        userInput = scnr.next().charAt(0);

        if (userInput == 'c') {
          System.out.println("I always win");
          break;
        }            
      }
      else {
        middleNumber = calcMidNum(middleNumber, upperLimit);
      }
  }
  } while (userInput != 'c');  
 }
 public static int calcMidNum(int a, int b) {
   int calcMid = (a + b) / 2;
   return calcMid;
 }
}

1 个答案:

答案 0 :(得分:0)

您不会调整下限和上限。

试试这个:

...
else if (userInput == 'h') { 
    upperLimit = middleNumber;
...

...
else if (userInput == 'l') {
    lowerLimit = middleNumber;
...