2017-10-16 54 views
0
DRoot dRoot = new DRoot(); 
    System.out.println("Answer from main : " + dRoot.digital_root(493193)); 

數字根是數字中所有數字的遞歸總和。給定n,取n的數字之和。如果該值有兩位數字,則繼續以這種方式減少直到產生一位數字。這隻適用於自然數。試圖通過if/else返回一個值

public class DRoot { 
    public static int digital_root(int num) 
    { 
     String temp = Integer.toString(num); 
     int a[] = new int[temp.length()]; 
     int output = 0; 

     for(int i = 0; i < temp.length(); i++) //getting individual numbers from passed in integer 
     { 
      a[i] = Integer.parseInt(temp.substring(i, i+1)); 
     } 

     for (int i = 0; i < a.length; i++) //sum of all digits in the number 
     { 
      output += a[i]; 
     } 
     if(String.valueOf(output).length() != 1) 
     { 
      digital_root(output); 
     } else { 
      return output; 
     } 
     return 0; 
    } 
} 

正如你可以在上面看到,我試圖通過測試「如果輸出的值不等於1,則返回digital_root(output);」但是一個if else語句返回一個數字,這回沒有按」 t工作,而是從返回下面的返回0,我放在那裏清除返回錯誤。任何幫助解決這個問題?感謝

回答

2

改變這一行 digital_root(output);return digital_root(output);

有它也可以做

0
if(String.valueOf(output).length() != 1) 
    { 
     return digital_root(output); 
    } else { 
     return output; 
    } 
0

那是因爲你正在內的遞歸調用其他優化,如果條件和重寫輸出變量。

例如,如果您將輸入1234傳遞給函數,那麼在第一次調用期間輸出將爲10,並且當長度不等於1時,它會再次進行遞歸調用並將其轉換爲1並返回它,但你沒有收集它返回的1,因爲在遞歸調用過程中,方法調用結束了輸出值的丟失。因此輸出將仍10,因爲它已經被執行,如果它會去最後一條語句,返回0

所以最好的解決辦法是使用一個變量來收集結果

int result = 0; 

if(String.valueOf(output).length() != 1) 
{ 
    result = digital_root(output); 
} else { 
    result = output; 
} 

return result;