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

时间:2013-09-19 15:20:29

标签: java variables methods scope

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

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

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.如果是这种情况,那么“最低限额”将变为50,因此该函数无法猜测低于50。

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

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

问题是,lowestguessinstance变量,但您尝试通过static方法进行访问。

选项

  • 将lowestGuess作为非基元(Object)传递给方法。
  • 使用非静态方法
  • make lowestGuess is static

传递lowerGuess

示例:

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

这使您也可以通过引用来更改最低值

非静态方法

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

将LowestGuess更改为静态

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


查看:


最后,如果你是在像eclipse这样的IDE中进行编程,那么你会有错误突出显示,其中的错误变得更加明显。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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