我正在尝试为超基本计算创建一个小数学库,例如:加法,减法,乘法和除法。
但是我的“解析”方法存在问题,该方法应该用作通过将所有变量连同字符串拆分为单独的变量(例如“ 5 * 5 + 2”)来计算包含在字符串中的方程的方法变成:
private static double Parse(string ParseEquation)
{
string[] split = Regex.Split(ParseEquation, @"(?<=[+-/*])");
List<string> keywords = new List<string>();
foreach (string i in split)
{
var var1 = Regex.Match(i, @"\d+").Value;
keywords.Add(var1);
var var2 = Regex.Match(i, @"([+-/*])").Value;
keywords.Add(var2);
}
double sum = 0;
for (int i = 0; i < keywords.Count - 1; i++)
{
string keyword = keywords[i + 1];
if (keyword == "+")
sum = Addition(sum, double.Parse(keywords[i]));
if (keyword == "-")
sum = Subtraction(sum, double.Parse(keywords[i]));
if (keyword == "/")
sum = Division(sum, double.Parse(keywords[i]));
if (keyword == "*")
sum = Multiplication(sum, double.Parse(keywords[i]));
}
return sum;
}
我当前的代码:
#content {
width: 300px;
height: 100px;
position: relative;
}
#box{
width: 300px;
height: 100px;
overflow: hidden;
position: relative;
background: orange;
}
input[type='button']{
position: absolute;
right:-30px;
z-index:1000;
float: right;
top: 20px;
}
Addition(),Subtraction(),Divion()和Multiplication()这些方法可以按预期工作(通过单元测试进行测试)。
所以我需要有关Parse方法更改内容的帮助,因为无论我尝试什么,输出总是错误的。
(完整代码:hastebin)
答案 0 :(得分:2)
通过以下更改解决了您的问题。
用第一个数字初始化您的sum
:
double sum = double.Parse(keywords[0]);
将for循环更改为2并从2开始循环
for (int i = 2; i < keywords.Count - 1; i += 2)
更改关键字以在i-1之前获取它
string keyword = keywords[i - 1];
这些更改将得到结果27
。
这是完整的代码:
private static double Parse(string ParseEquation)
{
string[] split = Regex.Split(ParseEquation, @"(?<=[+-/*])");
List<string> keywords = new List<string>();
foreach (string i in split)
{
var var1 = Regex.Match(i, @"\d+").Value;
keywords.Add(var1);
var var2 = Regex.Match(i, @"([+-/*])").Value;
keywords.Add(var2);
}
double sum = double.Parse(keywords[0]);
for (int i = 2; i < keywords.Count - 1; i += 2)
{
string keyword = keywords[i - 1];
if (keyword == "+")
sum = Addition(sum, double.Parse(keywords[i]));
else if (keyword == "-")
sum = Subtraction(sum, double.Parse(keywords[i]));
else if (keyword == "/")
sum = Division(sum, double.Parse(keywords[i]));
else if (keyword == "*")
sum = Multiplication(sum, double.Parse(keywords[i]));
}
return sum;
}
答案 1 :(得分:0)