为了账号安全,请及时绑定邮箱和手机立即绑定

Java返回做了奇怪的事情

Java返回做了奇怪的事情

陪伴而非守候 2021-09-12 14:35:09
我刚刚开始通过一些练习为大学学习 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;        }    }}输出(命令):debugStart10debugx8debugx6debugx4debugx2debugx0debug1程序需要在这里停止,正常情况下。但它继续......ERRORERRORERRORERRORERRORdebugEnd10 is uneven
查看完整描述

3 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

你也应该return递归调用,


 if(n>1){

     System.out.println("debugx");

     return isEven(n-2);//return at this point

 }

由于您还没有返回,您的递归调用正在到达else语句,因此返回false.


查看完整回答
反对 回复 2021-09-12
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

那是因为你在方法中有一个递归


 if(n>1){

        System.out.println("debugx");

        isEven(n-2);

 }

这个怎么运作

  1. 10 > 1,进去 10-2 = 8

  2. 8 > 1 ,进去 8-2 = 6

  3. 6 > 1,进去 6-2 = 4

  4. 4 > 1,进去 4-2 = 2

  5. 2 > 1, 进去 2-2 = 0

  6. 2 > 1,否,然后 n===0,是 -> System.out.println("debug1");

您需要添加一个returnisEven(n-2)


查看完整回答
反对 回复 2021-09-12
?
心有法竹

TA贡献1866条经验 获得超5个赞

我很确定您只是忘记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;

    }

}

输出现在应如下所示:


debugStart

10

debugx

8

debugx

6

debugx

4

debugx

2

debugx

0

debug1

debugEnd

10 is even


查看完整回答
反对 回复 2021-09-12
  • 3 回答
  • 0 关注
  • 139 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信