0

我在羅馬數字轉換功能中遇到了意想不到的結果。它會正確評估1,2或4位數字。它也將正確處理4位數字的第3位數字。如果這個數字是3位數,那麼它會評估這個百位的地方。羅馬數字開關機箱未正確評估

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; 
} 

555所需的返回: 「DLV」 返回爲555: 「VVV」

爲1555所需的返回: 「MDLV」 返回爲1555: 「MDLV」

爲什麼是一個3位數字的前兩位數字沒有被分配給正確的情況?

+0

您似乎在語言語法方面存在一些問題。你是否知道你正在使用按位或運算符('|'),而不是邏輯或運算符('||')? – user1421750

+0

我試圖讓案例需要像if語句中的「&&」這樣的兩個語句必須是真實的。我如何實現這一目標? –

+0

switch語句只能根據它的大小寫值來計算一個表達式。您應該將開關塊轉換爲一系列if/else語句。 – user1421750

回答

1

您希望匹配值集合,但switch語句只能根據其大小寫值計算一個表達式。按位OR操作符在這裏被濫用,因爲結果不會是evaluate.lengthi的值的串聯。您應該將第一個開關塊轉換爲一系列if/else語句。