1

所以我试图改变最小和最大猜测的值(实际猜测由随机数生成器进行),以阻止程序猜测相同的数字两次。

我有一种方法可以进行猜测,但也尝试设置最低和最高猜测,然后在再次使用该方法时更改

public static int takestab (int low, int high) {  
    int estimate;
    estimate = (low + (int)(Math.random() * ((high - low) + low)));

    if (estimate < number) {
        lowestguess = estimate;
    }
    else if (estimate > number) {
        highestguess = estimate;
    }
    return estimate;
}

此外,这些是我在方法范围之外的变量:

    int lowestguess = 1;
    int highestguess = 100;

因此,通过运行该方法,猜测可能是 50,而实际数字可能是 60。如果是这种情况,那么“lowestguess”将变为 50,因此函数无法猜测低于 50 的值。

当我以这种方式尝试时,cmd提示符说它找不到匹配的符号。

有任何想法吗?

4

3 回答 3

2

lowestguess是一个实例变量,不创建实例就无法访问。如果您想在static方法中使用它,那么您可以创建类的实例然后使用lowestguess,或者如果它有意义则lowestguess转为static.

non-static不允许以某种方式使用成员的原因static是,实例变量的内存初始化发生在创建对象时。并且static可以在不创建类的实例的情况下调用方法。

于 2013-09-19T15:23:27.510 回答
2

问题是这lowestguess是一个instance变量,但您试图通过一种static方法访问。

选项

  • 将最低猜测作为非原始(对象)传递给方法。
  • 使用非静态方法
  • 使最低猜测是静态的

通过最低猜测

例子:

public static int takestab(int low, int high, Integer Lowest)

这使您还可以通过引用对 Lowest 进行更改。

非静态方法

将方法更改为 public int takestab(int low, int high)

将 LowestGuess 更改为静态

在使用此选项的多线程环境中,您应该小心。


看:


最后,如果您在 Eclipse 之类的 IDE 中进行编程,您将有错误突出显示,其中诸如此类的错误会更快地变得明显。

于 2013-09-19T15:26:18.563 回答
1

一个static方法只能使用静态成员(当然还有本地变量)。因此,您的成员lowestguess&highestguess应声明为static.

于 2013-09-19T15:23:37.467 回答