繁体   English   中英

在Java中的方法范围之外更改变量

[英]Changing a variable outside the scope of a method in Java

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

我有一个可以猜测的方法,但也尝试设置一个最低和最高的猜测,当再次使用该方法时,它会发生变化

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提示说它找不到匹配的符号。

有任何想法吗?

问题在于, lowestguess是一个instance变量,但是您尝试通过static方法进行访问。

选件

  • 将lowerGuess作为非基本对象(对象)传递给方法。
  • 使用非静态方法
  • 使最低猜想为静态

通过最低猜测

例:

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

通过引用 ,这还允许您更改“最低”。

非静态方法

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

将LowestGuess更改为静态

使用此选项时,在多线程环境中应格外小心。


看到:


最后,如果您在eclipse之类的IDE中进行编程,则会突出显示错误,从而使诸如此类的错误变得更加明显。

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

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

static方法只能使用静态成员(当然也可以使用局部变量)。 因此, highestguess您的成员的lowestguesshighestguess声明为static

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM