我写了一个简短的程序,将数字转换为罗马数字。它包含两个非常相似的switch语句,其中一个工作得非常好,而另一个(在代码片段中注释掉)则不然。控制台记录“错误”消息,表明该功能的参数“e”没有以某种方式到达开关 但是,当我使用“if”而不是switch时,它可以工作。发生什么事了!?
提前致谢。
// d - digit being converted
// e - digit's place in the number (sorry, don't know the right term in English)
function convertToRoman(num) {
var convert = function(d, e){
var a = '';
var b = '';
var c = '';
/*
switch (e){
case '1': a='I'; b='V'; c='X'; break;
case '2': a='X'; b='L'; c='C'; break;
case '3': a='C'; b='D'; c='M'; break;
case '4': a='M'; break;
default: console.log('error')}
*/
if (e===1) {a='I'; b='V'; c='X';}
else if (e===2) {a='X'; b='L'; c='C';}
else if (e===3) {a='C'; b='D'; c='M';}
else if (e===4) {a='M';}
else {console.log('error')}
var s='';
switch (d){
case '0': s = ''; break;
case '1': s = a; break;
case '2': s = a+a; break;
case '3': s = a+a+a; break;
case '4': s = a+b; break;
case '5': s = b; break;
case '6': s = b+a; break;
case '7': s = b+a+a; break;
case '8': s = b+a+a+a; break;
case '9': s = a+c; break;
default: s = '#'; break; }
return s;
};
arr = String(num).split("");
for (i=arr.length-1; i>=0; i--){
var e = arr.length-i;
arr[i] = convert(arr[i], e);
}
return arr.join('');
}
convertToRoman(501);
答案 0 :(得分:1)
当您拨打convert
时,您传递了char
代表d和num
代表e,因此注释掉的switch语句需要使用数字,而不是字符,这是基本上你用if,else if,else替换。