【问题标题】:Changing a variable outside the scope of a method in Java在 Java 中更改方法范围之外的变量
【发布时间】:2013-09-19 15:20:28
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

  • 其他变量在哪个范围内?要么将它们设为静态,要么将它们包装在您在方法中修改的 Class 实例中。
  • 你不能在静态方法中使用实例变量。
  • 尽管一些答案和 cmets 解决了可能的原因,但请包括您在尝试编译时遇到的错误。它可能比简单的“找不到匹配的符号”更具描述性。如果他们能解释消息如何表明问题,答案将更加有用。
  • ——作用域在主类——明白了。从我的方法中删除了静态,现在它工作正常 - 抱歉,没有考虑那个。将来会这样做

标签: java variables methods scope


【解决方案1】:

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

选项

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

通过最低猜测

例子:

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

这使您还可以对 Lowest 进行更改,因为它是通过引用

非静态方法

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

将 LowestGuess 更改为静态

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


参见:


最后,如果您在 Eclipse 之类的 IDE 中进行编程,您会看到错误突出显示,这样的错误会更快地变得明显。

【讨论】:

  • 他们都很享受。还不能投票,所以谢谢你的彻底建议。我正在使用 DrJava,但我对其他 IDE 还不太熟悉。刚刚开始我的 Java 之旅。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 2011-12-06
      相关资源
      最近更新 更多