Java返回做了奇怪的事情

我刚刚开始通过一些练习为大学学习 Java。我对编程并不陌生,只是对 Java。我遵循了所有说明,但 Java 的返回函数做了一些非常奇怪的事情。我插入了一些调试输出以更好地理解代码。包括程序的 CMD.output。


我认为该函数会在返回后直接终止。但为什么在这种情况下不这样做呢?


public class Rekursion {


    public static void main(String[] args) {

        int zahl = 10;

        System.out.println("debugStart");

        boolean even = isEven(zahl);

        System.out.println("debugEnd");


        if (even == true) {

            System.out.println(zahl + " is even");

        } else {

            System.out.println(zahl + " is uneven");

        }

    }


    public static boolean isEven(int n) {

        System.out.println(n);

        if (n > 1) {

            System.out.println("debugx");

            isEven(n - 2);

        }


        if (n == 0) {

            System.out.println("debug1");

            return true;

        } else if (n == 1) {

            System.out.println("debug2");

            return false;

        } else {

            System.out.println("ERROR");

            return false;

        }

    }

}

输出(命令):


debugStart

10

debugx

8

debugx

6

debugx

4

debugx

2

debugx

0

debug1

程序需要在这里停止,正常情况下。但它继续......


ERROR

ERROR

ERROR

ERROR

ERROR

debugEnd

10 is uneven


陪伴而非守候
浏览 140回答 3
3回答

慕姐8265434

你也应该return递归调用, if(n>1){     System.out.println("debugx");     return isEven(n-2);//return at this point }由于您还没有返回,您的递归调用正在到达else语句,因此返回false.

元芳怎么了

那是因为你在方法中有一个递归 if(n>1){        System.out.println("debugx");        isEven(n-2); }这个怎么运作10 > 1,进去 10-2 = 88 > 1 ,进去 8-2 = 66 > 1,进去 6-2 = 44 > 1,进去 4-2 = 22 > 1, 进去 2-2 = 02 > 1,否,然后 n===0,是 -> System.out.println("debug1");您需要添加一个return在isEven(n-2)

心有法竹

我很确定您只是忘记return在isEven(n-2).所以 isEven() 方法的更正代码将是这样的:public static boolean isEven(int n){    System.out.println(n);    if(n>1){        System.out.println("debugx");        return isEven(n-2);    }    if (n == 0) {        System.out.println("debug1");        return true;    }    else if (n == 1) {        System.out.println("debug2");        return false;    }    else{        System.out.println("ERROR");        return false;    }}输出现在应如下所示:debugStart10debugx8debugx6debugx4debugx2debugx0debug1debugEnd10 is even
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java