所以我正在尝试用Java创建一个数字猜谜游戏。用户认为1到100之间的数字然后计算机尝试使用二进制搜索方法猜测数字。因此,计算机的第一个猜测是50,如果用户选择的值高于75,如果低于该值,那么它将猜测为37。
因此,每当用户输入他/她的选择时,我都会尝试设置新的上限和下限。如果计算机猜测75并且用户说太高,那么新的上边界现在应该是74并且如果37太低而不是38则成为新的下边界。我试图在一个名为NumberGuesser(int lowerBound,int upperBound)的构造函数中执行此操作。似乎我有下限工作,但我需要帮助在上边界工作。也许,你们可以让我的下边界一次过来看看它是否正常工作。我也似乎无法让电脑猜到50以上。如果我选择更高,它不会超过50。
现在我们正在学习Java类中的类,我在类中编写了大部分决策算法,程序中的对象引用了我的类NumberGuesser。
这是我的代码:
public class NumberGuesser
{
private int userGuess = 50;
private int max = 100;
private int min = 1;
NumberGuesser(int lowerBound, int upperBound)
{
max = userGuess;
/*if(userGuess > max)
{
max = userGuess;
}
else if(min < userGuess)
{
min = userGuess;
}*/
if(userGuess < max)
{
max = userGuess;
}
else if(userGuess > max)
{
min = userGuess;
}
}
void lower()
{
userGuess = userGuess / 2;
}
void higher()
{
userGuess = ((max - userGuess) / 2) + userGuess;
}
public int getCurrentGuess()
{
return userGuess;
}
void reset()
{
}
}
主要驱动程序类
import java.util.*;
public class Assignment7
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
char guess;
int min = 1;
int max = 100;
NumberGuesser numGuess = new NumberGuesser(min, max);
System.out.println("Please think of a number between 1 and 100");
do
{
System.out.print("Is the number "+numGuess.getCurrentGuess()+"(h/l/c): ");
guess = input.next().charAt(0);
if(guess == 'h')
{
numGuess.higher();
}
else if(guess == 'l')
{
numGuess.lower();
}
else if(guess == 'c')
{
System.out.println("Correct!");
}
}while(guess != 'c');
}
}
任何帮助都会非常感谢大家!干杯!
答案 0 :(得分:1)
你的代码毫无意义。如果你要将参数传递给构造函数,通常使用这些数字来设置类字段,我看到你什么都不做。
但是说过这个,我不太确定我是用构造函数参数做的。我建议改为
setUpperBound(int upperBound)
和setLowerBound(int lowerBound)
方法。根据你的驱动程序代码,你的代码会调用构造函数一次,这很好,你需要给你的类upperBound和lowerBound int字段,正如我已经建议的那样,然后用你的构造函数设置你的lowerBound和upperBound,您尚未执行的操作,然后在lower()
和higher()
方法调用中更改这些字段的值。你现在想要尝试这样做。
在你的上下方法中,你必须首先设置上限和下限,你可以使用min和max,之前进行新的猜测。然后在进行猜测时使用最小值和最大值。你不是这样做的。