对于练习作业,我需要创建一个计算器,它可以:
我已经使一切工作与处理负数分开了,我真的不知道如何做这样的事情,并认为你可能能够提供帮助。这是我目前的解决代码:
public decimal getResult(string equation)
{
//parse a equation as a string and solve it
List<string> numbers = input.Split(opSplit, StringSplitOptions.RemoveEmptyEntries).ToList<string>();
List<string> operators = input.Split(numSplit, StringSplitOptions.RemoveEmptyEntries).ToList<string>();
//remove any decimals from operators list
for (int i = 0; i < operators.Count; i++)
{
if (operators[i] == ".")
{
operators.RemoveAt(i);
}
}
//set total to first values in numbers then remove in from list
decimal total = decimal.Parse(numbers[0]);
numbers.Remove(total.ToString());
int count = 0;
foreach(string s in numbers) {
decimal val = decimal.Parse(s);
string current_operator = operators[count];
MessageBox.Show(current_operator);
switch (current_operator)
{
case "+":
total += val;
break;
case "-":
total -= val;
break;
case "x":
total *= val;
break;
case "/":
total /= val;
break;
}
if (count != operators.Count-1)
{
count++;
}
}
return total;
}
我的方程以这种格式输入。
答案 0 :(得分:3)
首先:现在你没有考虑到操作的顺序,这是一个非常糟糕的主意。
我假设你想做这样的事情:-3 + -5
,对吗?
以下是您可以做出的一些假设:
改为设置total = 0
。这样,如果您从-5
开始,那么您可以使用已经正确的等式0 - 5
,并且没有初始值的麻烦。
-3 + -5
与0 - 3 - 5
相同。利用这一点:解析您的操作员并检查是否有两个操作员互相追随。如果你有这个:简化操作,你很高兴。
好的方法:
+-------------+
| op | op | = |
+-------------+
| + | + | + |
| + | - | - |
| - | + | - |
| - | - | + |
+-------------+