0

所以我正在尝试用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');
}
}

任何帮助将不胜感激!干杯!

4

1 回答 1

1

你的代码没有意义。如果您要将参数传递给构造函数,通常您会使用这些数字来设置类字段,而我看到您没有做任何此类事情。

但是话虽如此,我不太确定我是否会使用构造函数参数来执行此操作。我建议改为

  • 首先,为您的班级提供上限和下限 int 字段。
  • 根据用户的响应更改这些字段保存的值。也许给它一个setUpperBound(int upperBound)和一个setLowerBound(int lowerBound)方法。
  • 使用这些值让您的班级进行下一次猜测。

根据您的驱动程序代码,您的代码调用构造函数一次,这很好,您需要为您的类提供上界和下界 int 字段,正如我已经推荐的那样,然后使用您的构造函数设置您的下界和上界,你'还没有做,然后在您的lower()higher()方法调用中更改这些字段的值。您现在将要尝试执行此操作。


在你的higher和lower方法中,你必须先设置上限和下限,你可以使用min和max,然后再进行新的猜测。然后在猜测时使用最小值和最大值。你不这样做。

于 2013-10-12T02:33:47.910 回答