无法让我的整数在方法中不断增加
Can't get my integer to increase constantly in method
我对 java(以及大多数编程语言作为一个整体)还很陌生,我正在尝试了解一些不熟悉的概念,其中之一就是递归。为了测试它,我试着让它不断增加并显示一个数字。
public static void recursionTest() {
int numb = 0;
System.out.println(numb);
numb += 1;
recursionTest();
}
我试过这样写,但是只会一直打印数字0,不会增加。然后我尝试在 println 之前放置,但它只产生了数字 1。然后我尝试用 while 循环替换。
public static void recursionTest() {
int numb = 0;
System.out.println(numb);
while (numb != -1) {
numb =+ 1;
}
recursionTest();
}
这最终只打印出一个 0,然后我尝试像以前一样将它移到 println 上方,但它没有显示任何内容。有什么我想念的吗?对不起,如果我的问题很愚蠢。
您应该在 Java 中阅读有关变量范围和生命周期的内容。您在函数内部声明了一个局部变量,它在您编写时被“创建”并启动(为 0):
int numb = 0;
此变量仅在 当前 函数调用中可见。在您的函数执行后,变量及其值将失效并被销毁。再次调用该函数时,变量被创建并再次初始化(为0)。
如果您的变量需要在函数的多次调用中“存活”,请考虑在函数外部声明它:
private static int numb = 0;
public static void recursionTest() {
System.out.println(numb);
while (numb != -1) {
numb =+ 1;
}
recursionTest();
}
或者作为参数传递:
public static void main(String[] args) {
recursionTest(0);
}
public static void recursionTest(int numb) {
System.out.println(numb);
while (numb != -1) {
numb =+ 1;
}
recursionTest(numb);
}
正如您所定义的,numb
是方法范围内的局部变量。它是在每次方法调用开始时使用指令 int numb = 0
创建的,并在调用结束时销毁。每次调用该方法(即使调用是递归的)都是一个不同的变量。代码中有相同的名称,但它是不同的。
为了实现计数器,您应该将 numb
定义为 class 的静态字段或作为参数传递给方法。您可以执行以下操作:
选项 1(静态字段):
public class TheClass {
static int numb = 0;
public static void recursionTest() {
System.out.println(numb);
numb += 1;
recursionTest();
}
}
选项 2(作为参数传递):
public class TheClass {
public static void recursionTest(int numb) {
System.out.println(numb);
numb += 1;
recursionTest(numb);
}
}
在第二次尝试中,您在 System.out.println
外部 while
循环中执行,因此您只打印一次该值。此外,由于无限 while 循环,递归调用永远不会完成,但如果您对循环施加限制,对同一方法的新调用将导致计数器被重置,原因与以前相同。
我对 java(以及大多数编程语言作为一个整体)还很陌生,我正在尝试了解一些不熟悉的概念,其中之一就是递归。为了测试它,我试着让它不断增加并显示一个数字。
public static void recursionTest() {
int numb = 0;
System.out.println(numb);
numb += 1;
recursionTest();
}
我试过这样写,但是只会一直打印数字0,不会增加。然后我尝试在 println 之前放置,但它只产生了数字 1。然后我尝试用 while 循环替换。
public static void recursionTest() {
int numb = 0;
System.out.println(numb);
while (numb != -1) {
numb =+ 1;
}
recursionTest();
}
这最终只打印出一个 0,然后我尝试像以前一样将它移到 println 上方,但它没有显示任何内容。有什么我想念的吗?对不起,如果我的问题很愚蠢。
您应该在 Java 中阅读有关变量范围和生命周期的内容。您在函数内部声明了一个局部变量,它在您编写时被“创建”并启动(为 0):
int numb = 0;
此变量仅在 当前 函数调用中可见。在您的函数执行后,变量及其值将失效并被销毁。再次调用该函数时,变量被创建并再次初始化(为0)。
如果您的变量需要在函数的多次调用中“存活”,请考虑在函数外部声明它:
private static int numb = 0;
public static void recursionTest() {
System.out.println(numb);
while (numb != -1) {
numb =+ 1;
}
recursionTest();
}
或者作为参数传递:
public static void main(String[] args) {
recursionTest(0);
}
public static void recursionTest(int numb) {
System.out.println(numb);
while (numb != -1) {
numb =+ 1;
}
recursionTest(numb);
}
正如您所定义的,numb
是方法范围内的局部变量。它是在每次方法调用开始时使用指令 int numb = 0
创建的,并在调用结束时销毁。每次调用该方法(即使调用是递归的)都是一个不同的变量。代码中有相同的名称,但它是不同的。
为了实现计数器,您应该将 numb
定义为 class 的静态字段或作为参数传递给方法。您可以执行以下操作:
选项 1(静态字段):
public class TheClass {
static int numb = 0;
public static void recursionTest() {
System.out.println(numb);
numb += 1;
recursionTest();
}
}
选项 2(作为参数传递):
public class TheClass {
public static void recursionTest(int numb) {
System.out.println(numb);
numb += 1;
recursionTest(numb);
}
}
在第二次尝试中,您在 System.out.println
外部 while
循环中执行,因此您只打印一次该值。此外,由于无限 while 循环,递归调用永远不会完成,但如果您对循环施加限制,对同一方法的新调用将导致计数器被重置,原因与以前相同。