这是一个完成的罗马到十进制数字转换器。
Dictionary<char,int> nTrans = new Dictionary<char,int>();
nTrans.Add('I',1);
nTrans.Add('V', 5);
nTrans.Add('X', 10);
nTrans.Add('L', 50);
nTrans.Add('C', 100);
nTrans.Add('D', 500);
nTrans.Add('M', 1000);
string rNum = "XV";
int dNum = 0;
for (int i = 0; i < rNum.Length; i++)
{
if (i < rNum.Length-1)
{
if (nTrans[rNum[i]] < nTrans[rNum[i + 1]])
{
dNum -= nTrans[rNum[i]];
}
else
{
dNum += nTrans[rNum[i]];
}
}
else
{
dNum += nTrans[rNum[i]];
}
}
但是我无法弄清楚如何逃避使用这个if-else语句:
if (i < rNum.Length-1)
{
//Code
}
else
{
dNum += nTrans[rNum[i]];
}
有什么建议我可以避免使用它吗?问题只是为了优化和提高我的编码技能!
答案 0 :(得分:4)
你可以处理循环中0和rNum.Length - 1
之间的所有内容,然后处理它之外的最后一个吗?
类似的东西:
for (int i = 0; i < rNum.Length - 1; i++)
{
// do regular stuff
}
if (rNum.Length != 0)
dNum += nTrans[rNum[rNum.Length - 1]];
如果这是一个函数,你可以将rNum.Length == 0
检查移动到顶部,如果为真则只返回0作为dNum。这样你就可以跳过所有额外的处理。
答案 1 :(得分:-3)
案例陈述可以提高可读性,或者也可以是命令图/字典,其中每个计算都存储在字典/地图中并直接查找。