我是爪哇人,我到处找,但我没有得到一个简单的概念。
我将两个变量声明为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);
}
}
}
您正在重新定义num1变量和num2变量
你的本地变量重新定义为同样的事情。这应该给个警告沿IDE的"本地变量隐藏线的一场"。在这样的范围的方法有一个numX。
你需要参考的实例变量声明一个新的变量:不
public void getNumX() {
numX = readInt("?:");
//...
}
你看我这样删除的int声明这是我到现在assigns numX值比一个本地变量。
哇,这个网站太不可思议了,我几乎立刻收到了来自多个人的相同回复-谢谢!我现在明白了。
实际上你已经创建了新的内部变量的方法。所以需要分配到类的值是变量,但变量:浸出法这样的变化
int num2 = readInt("?:");
to
num2 = readInt("?:");
和
int num1 = readInt("?:");
to
num1 = readInt("?:");
哇,这个网站太不可思议了,我几乎立刻收到了来自多个人的相同回复-谢谢!我现在明白了。
当你在做int num1 = readInt("?:");getnum1(法),其本地变量存储在栈。它并不是问题,全局变量(实例变量的感知是指你想)
这样做的样本。
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放进去,我会声明变量吗?谢谢!
对.正确的做法是,当再次将int放入其中时,您正在去除局部变量