类变量在类中的不同方法中不可用 - 新手

时间:2013-07-26 07:42:42

标签: java variables methods declaration

我是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);

    }
}
}

3 个答案:

答案 0 :(得分:0)

当你在方法getNum1()中执行int num1 = readInt("?:");时,它的一个局部变量存储在堆栈中。它不引用要引用的全局变量(声明为实例变量)

所以这样做:

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);
    }
}

答案 1 :(得分:0)

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

   int num2 = readInt("?:");

  num2 = readInt("?:");

   int num1 = readInt("?:");

  num1 = readInt("?:");

答案 2 :(得分:0)

你重新声明一个名为同一个东西的局部变量。这应该给出“本地变量隐藏字段”行的IDE警告。因此,在方法的范围内,有另一个 numX

您需要引用实例变量而不是声明新变量:

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

您看到我删除了int声明,以便现在将值分配给numX而不是局部变量。