2016-11-09 134 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