0

ローマ数字変換機能で予期しない結果が発生しています。 1桁、2桁、4桁の数字が正しく評価されます。また、4桁の数字の3桁も正しく処理します。数字が3桁の場合、100の場所を自分の場所と同じように評価します。 555のための "DLV" リターン:1555のための "VVV"ローマ数字スイッチのケースが正しく評価されない

目的の戻り値:1555のための "MDLV" 戻る: "MDLV"

はなぜ555のリターンを希望

function convertToRoman(num) { 

var evaluate = num.toString(); 
var replace = ""; 
var oneUnit; 
var fiveUnit; 
var tenUnit; 


for (var i = 0; i < evaluate.length; i++) 
{ 

switch (evaluate.length | i) 
    { 
    case 1|0: 
    case 2|1: 
    case 3|2: 
    case 4|3: 
     oneUnit = "I"; 
     fiveUnit = "V"; 
     tenUnit = "X"; 
     break; 
    case 2|0: 
    case 3|1: 
    case 4|2: 
     oneUnit = "X"; 
     fiveUnit = "L"; 
     tenUnit = "C"; 
     break; 
    case 3|0: 
    case 4|1: 
     oneUnit = "C"; 
     fiveUnit = "D"; 
     tenUnit = "M"; 
     break; 
    case 4|0: 
     oneUnit = "M"; 
     fiveUnit = "MMMMM"; 
     tenUnit = "MMMMMMMMMM"; 
     break; 
    } 


switch (evaluate.charAt(i)) 
{ 
    case "1": 
    replace += oneUnit; 
    break; 

    case "2": 
    replace += oneUnit + oneUnit; 
    break; 

    case "3": 
    replace += oneUnit + oneUnit + oneUnit; 
    break; 

    case "4": 
    replace += oneUnit + fiveUnit; 
    break; 

    case "5": 
    replace += fiveUnit; 
    break; 

    case "6": 
    replace += fiveUnit + oneUnit; 
    break; 

    case "7": 
    replace += fiveUnit + oneUnit + oneUnit; 
    break; 

    case "8": 
    replace += fiveUnit + oneUnit + oneUnit + oneUnit; 
    break; 

    case "9": 
    replace += oneUnit + tenUnit; 
    break; 
} 
} 
num = replace; 
return num; 
} 

3桁の数字の最初の2桁が正しいケースに割り当てられていませんか?

+0

言語の構文に問題があるようです。論理OR演算子( '||')ではなく、ビット単位のOR演算子( '|')を使用していますか? – user1421750

+0

私は、if文に "&&"のようなものが必要なので、両方の文が真でなければならないようにしようとしています。私はそれをどのように達成するのですか? –

+0

switch文は、1つの式のみをその大文字と小文字の値で評価することができます。スイッチブロックを一連のif/elseステートメントに変換する必要があります。 – user1421750

答えて

1

値のセットを一致させたいが、switchステートメントは1つの式だけをその大文字と小文字の値に対して評価することができます。ビット単位のOR演算子は、evaluate.lengthiの値の連結ではないため、ここで誤って使用されます。最初のスイッチブロックを一連のif/elseステートメントに変換する必要があります。

関連する問題