0

로마 숫자 변환 기능에서 예기치 않은 결과가 나타납니다. 1, 2 또는 4 자리 숫자를 올바르게 평가합니다. 또한 4 자리 숫자의 세 번째 숫자도 올바르게 처리합니다. 숫자가 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 자리 숫자의 처음 2 자리가 올바른 경우에 할당되지 않습니까?

+0

언어 구문에 몇 가지 문제가있는 것 같습니다. 논리 OR 연산자 ('||')가 아닌 비트 OR 연산자 ('|')를 사용하고 있다는 것을 알고 계십니까? – user1421750

+0

나는 if 문에 "&&"와 같은 것을 요구하므로 양쪽 진술이 모두 true가되도록해야한다. 어떻게해야합니까? –

+0

switch 문은 대/소문자 값에 대해 하나의 식만 계산할 수 있습니다. 스위치 블록을 일련의 if/else 문으로 변환해야합니다. – user1421750

답변

1

값 집합을 일치 시키려하지만 switch 문은 대/소문자 값에 대해 하나의 식만 계산할 수 있습니다. 결과는 evaluate.lengthi 값의 연결이 아니기 때문에 비트 OR 연산자가 여기에서 잘못 사용됩니다. 첫 번째 스위치 블록을 일련의 if/else 문으로 변환해야합니다.