罗马数字开关盒未正确评估
Roman Numeral Switch Case not evaluating properly
我在罗马数字转换函数中得到了意外的结果。它将正确评估 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 需要 Return:"DLV"
Return 对于 555:"VVV"
1555 需要 Return:"MDLV"
Return 1555:"MDLV"
为什么 3 位号码的前 2 位没有分配到正确的大小写?
您想匹配一组值,但 switch 语句只能根据其 case 值评估一个表达式。按位 OR 运算符在这里被误用,因为结果不会是 evaluate.length
和 i
的值的串联。您应该将第一个开关块转换为一系列 if/else 语句。
我在罗马数字转换函数中得到了意外的结果。它将正确评估 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 需要 Return:"DLV" Return 对于 555:"VVV"
1555 需要 Return:"MDLV" Return 1555:"MDLV"
为什么 3 位号码的前 2 位没有分配到正确的大小写?
您想匹配一组值,但 switch 语句只能根据其 case 值评估一个表达式。按位 OR 运算符在这里被误用,因为结果不会是 evaluate.length
和 i
的值的串联。您应该将第一个开关块转换为一系列 if/else 语句。