2016-11-09 15 views
2

私はプログラムを実装する際に問題がありました(下記参照)。問題は私がnum = 1006を渡すときに発生し、プライベートメソッドは "MVI"を返しますが、publicメソッドは "M"を返します。誰でもこれを説明できますか?Java Recursion return

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) Javaは値言語によってパスがあるため、sの値を変更しません。

あなたは、新しい値を割り当てるsために

s = intToRoman(num, s); 

と各

intToRoman(num, s); 

を交換する必要があります。

代わりにsの代わりにintToRoman(num, s)を返すことです。