我正在尝试使用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;
}
}
答案 0 :(得分:0)
您不会调整下限和上限。
试试这个:
...
else if (userInput == 'h') {
upperLimit = middleNumber;
...
和
...
else if (userInput == 'l') {
lowerLimit = middleNumber;
...