2016-11-09 118 views
2

所以我在實現一個程序時遇到了一個問題(下面給出)。當我傳遞num = 1006時,問題發生,私有方法返回「MVI」,但公共方法返回「M」。有誰能解釋這個嗎?Java遞歸返回

public class Solution { 
    public String intToRoman(int num) { 
     String j = intToRoman(num, ""); 
     return j; 
    } 

private String intToRoman(int num, String s) { 
    //String s = ""; 
    if (num >= 1000) { 
     s += 'M'; 
     num -= 1000; 
     intToRoman(num, s); 
    } else if (num >= 500) { 
     s += 'D'; 
     num -= 500; 
     intToRoman(num, s); 
    } else if (num >= 100) { 
     s += 'C'; 
     num -= 100; 
     intToRoman(num, s); 
    } else if (num >= 50) { 
     s += 'L'; 
     num -= 50; 
     intToRoman(num, s); 
    } else if (num >= 10) { 
     s += 'X'; 
     num -= 10; 
     intToRoman(num, s); 
    } else if (num >= 5) { 
     s += 'V'; 
     num -= 5; 
     System.out.println("Checkpoint 1"); 
     System.out.println(s); 
     intToRoman(num, s); 
    } else if (num >= 1) { 
     s += 'I'; 
     num -= 1; 
     System.out.println("Checkpoint 2"); 
     intToRoman(num, s); 
    } else { 
     System.out.println("Returning "+ s); 
     return s; 
    } 
    return s; 
} 
+1

你可能想'返回intToRomain(num,s);'。 –

+0

如果你不想重新賦值's',使用StringBuilder – Jerry06

回答

2

intToRoman(num, s)不會改變的s值,因爲Java是按值傳遞的語言。

,就應該替換每個

intToRoman(num, s); 

s = intToRoman(num, s); 

爲了s被分配一個新的值。

替代方法是返回intToRoman(num, s)而不是s