import java.util.Scanner;
public class test {
public static void main(String args[]){
int a = 1000;
while(a>0){
System.out.println("Question to prevent infinite while loop");
Scanner input = new Scanner (System.in);
int inzet = input.nextInt();
System.out.println(a);
test(a);
}
}
public static void test(int a){
System.out.println(a);
a = a + 100;
System.out.println(a);
}
}
我有一个问题。为什么int a
没有更新?每次重置为1000。我不希望这样。有人可以帮帮我吗?如果我运行程序,我会得到这个:
Question to prevent infinite while loop
2
1000
1000
1100
Question to prevent infinite while loop
2
1000
1000
1100
Question to prevent infinite while loop
2
1000
1000
1100
我想得到这段代码:
Question to prevent infinite while loop
2
1000
1000
1100
Question to prevent infinite while loop
2
1100
1100
1200
Question to prevent infinite while loop
2
1200
1200
1300
此外,这是我的第一篇文章。请给我一些反馈,告诉我下次如何更好地提出问题。
答案 0 :(得分:1)
您的更新值仅在test
方法中可见。您可以将a
字段与删除当前声明(包括main
方法以及test
参数)结合使用:
import java.util.Scanner;
public class test {
private static int a = 1000;
public static void main(String args[]) {
while (a > 0) {
System.out.println("Question to prevent infinite while loop");
Scanner input = new Scanner(System.in);
int inzet = input.nextInt();
System.out.println(a);
test();
}
}
public static void test() {
System.out.println(a);
a = a + 100;
System.out.println(a);
}
}
或者您可以返回方法中的更新值并将返回值分配给a
:
import java.util.Scanner;
public class test {
public static void main(String args[]) {
int a = 1000;
while (a > 0) {
System.out.println("Question to prevent infinite while loop");
Scanner input = new Scanner(System.in);
int inzet = input.nextInt();
System.out.println(a);
a = test(a);
}
}
public static int test(int a) {
System.out.println(a);
a = a + 100;
System.out.println(a);
return a;
}
}
答案 1 :(得分:0)
像这样制作a
类属性:
public class test {
static int a = 1000;
//...
}
答案 2 :(得分:0)
在Java中, int是一个原始对象所以当你将它传递给测试函数时,实际上你传递了这个int的副本。
如果您想通过推荐传递,可以使用IntRef
。
答案 3 :(得分:0)
第一个答案都是正确的
在此处阅读有关参考与值的更多信息(非专门针对Java):What's the difference between passing by reference vs. passing by value?
这里特别针对Java:Is Java "pass-by-reference" or "pass-by-value"?
第二个解决方案(向您的类添加一个名为a的静态变量)可能会有所不同。由于您的示例非常简单,因此它具有相同的输出。但是当你将static修饰符放到一个变量中时,它将在类的所有实例之间共享。