【问题标题】:Java variables not available in different methods within class - newbieJava 变量在类中的不同方法中不可用 - 新手
【发布时间】:2013-07-26 07:42:42
【问题描述】:

我是 Java 新手,我到处寻找,但我没有得到一个简单的概念。

我将两个变量声明为 int。我希望这两个变量对所有方法都是全局的。 在我的第一种方法中,我想从用户输入中获取第一个变量的值。 然后我希望该新值可用、识别并由第二种方法调用。但是,每次第一种方法结束时,变量的值都会被设置回0,而第二种方法在第一种方法输入中找不到用户给它的值。我究竟做错了什么?我需要以不同的方式声明我的变量吗?我需要以不同的方式声明我的方法吗?感谢您的帮助!

import acm.program.*;

public class FindRange extends ConsoleProgram {

int num1;
int num2;

public void run() {

    println("This program finds the largest and smallest numbers.");

    getNum1();
    getNum2();
    // getNumUntilZero();
}

public void getNum1() {

    int num1 = readInt("?:");
    if (num1 == 0) { //do not accept 0 for first number
        println("Please try again without 0.");
        getNum1();
    }

}

public void getNum2() {
    int num2 = readInt("?:");
    if (num2 == 0) { //if 2nd number is 0, print 1st num as high and low nums
        println("Biggest number:" + num1);
        println("Smallest number:" + num1);

    }
}
}

【问题讨论】:

  • 您正在重新声明num1variable 以及num2 变量

标签: java variables methods declaration


【解决方案1】:

当您在方法 getNum1() 中执行 int num1 = readInt("?:"); 时,它是存储在 stack 中的局部变量。它没有引用您要引用的全局变量(声明为实例变量)

所以这样做:

public void getNum1() {
    num1 = readInt("?:");
    if (num1 == 0) { // do not accept 0 for first number
        println("Please try again without 0.");
        getNum1();
    }
}

public void getNum2() {
     num2 = readInt("?:");
    if (num2 == 0) { // if 2nd number is 0, print 1st num as high and low nums
        println("Biggest number:" + num1);
        println("Smallest number:" + num1);
    }
}

【讨论】:

  • 哇,我只需要在我的方法中删除 int num1 ... 对吧?我想如果我再次将 int 放在那里,我会重新声明变量吗?谢谢!
  • 是的。你是对的,当再次把 int 放在那里时,你正在贴局部变量
【解决方案2】:

实际上你已经在方法中创建了新变量。所以实际上不是给类变量赋值,而是给方法变量赋值: 所以改变

   int num2 = readInt("?:");

  num2 = readInt("?:");

   int num1 = readInt("?:");

  num1 = readInt("?:");

【讨论】:

  • 哇,这个网站太棒了,我几乎立刻就收到了很多人的相同回复——谢谢!我现在明白了。
【解决方案3】:

您重新声明了一个名为相同事物的局部变量。这应该会按照“局部变量隐藏字段”的行给出 IDE 警告。所以在方法的范围内还有另一个numX

你需要引用实例变量而不是声明一个新变量:

public void getNumX() {
    numX = readInt("?:");
    //...
}

你看我已经删除了 int 声明,所以现在这会将值分配给 numX 而不是局部变量。

【讨论】:

  • 哇,这个网站太棒了,我几乎立刻就收到了很多人的相同回复——谢谢!我现在明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 2013-10-08
相关资源
最近更新 更多