首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简化计算器的代码(帮助)

简化计算器的代码(帮助)
EN

Software Engineering用户
提问于 2016-06-26 13:44:26
回答 1查看 238关注 0票数 0

这是在命令行上工作的计算器代码的一部分。它工作得很好,而且数学是正确的,但它有点多余:

代码语言:javascript
复制
switch(Operator)
 {
  case "+": result = num1 + num2;
  printResult();
  break;

  case "-" : result = num1 - num2;
  printResult();
  break;

  case "*":
  result = num1 * num2;
  printResult();
  break;

  case "/":
  result = num1 / num2;
  printResult();
  break;

  case "^":
  result = Math.Pow(num1, num2);
  printResult();
  break;

  case "root":
  result = Math.Pow(num1, (1/num2));
  Console.WriteLine("Root degree " + num2 + " of " + num1 + " is " + result);
  break;

  default:
  Console.WriteLine("Invalid operator.");
  break;

}//END SWITCH       

有没有办法避免这样的冗余代码

代码语言:javascript
复制
result = num1 Operator num2;

代码语言:javascript
复制
for char o = Operator
result = num1 Operator num2;

即使只是为了+-/*操作?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2016-06-30 10:57:44

首先,通过将PrintResult()移动到开关下面来删除重复。您每次都这样称呼它(几乎,您将需要使它更加健壮,我想)。然后,更改方法以返回结果。此方法计算并打印。不应该,那会破坏SRP。

现在,您可以创建要调用的函数字典。

代码语言:javascript
复制
var operations = new Dictionary<string, Func<int, int, double>>()
{
    { "+", (a, b) => a + b },
    { "-", (a, b) => a - b },
    //...
}

return operations[Operator](num1, num2);

可能不会编译,我在打电话。异常处理留待操作。

当然,如果你真的毛茸茸的,您可以创建一个计算器解析器。和真的过火的解决方案。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/323295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档