无法让我的整数在方法中不断增加

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 循环,递归调用永远不会完成,但如果您对循环施加限制,对同一方法的新调用将导致计数器被重置,原因与以前相同。