亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號