我想用一个按钮和文本框进行数学运算,当输入文本框操作如25 5-10 7并按下按钮显示结果时,我正在尝试这样做,但我做不到。在这段代码中,我为文本框中的每个字符创建一个,我希望在firstvalue参数和op参数中存储25个,在secondvalue参数中存储5个,并使操作25 5=30,将其存储在firstvalue参数和store-in op中,在secondvalue中存储10个,并将其存储在firstvalue中。。。。等等,直到绳子的长度。但我不知道在哪里以及如何存储第二个值
private void button1_Click(object sender, EventArgs e)
{
string allValue = textBox1.Text;
int firstValue=0;
int secondValue=0;
string first = string.Empty;
string op = string.Empty;
foreach (char item in allValue)
{
if (char.IsNumber(item))
{
first += item;
}
else if(item=='+' || item=='-' || item=='*' || item=='/')
{
firstValue = Int32.Parse(first);
op += item;
first = "";
switch (op)
{
case "+":
firstValue = firstValue + secondValue;
break;
case "-":
firstValue = firstValue - secondValue;
break;
case "+-":
firstValue = firstValue +- secondValue;
break;
case "*":
firstValue = firstValue * secondValue;
break;
case "/":
firstValue = firstValue / secondValue;
break;
}
}
}
MessageBox.Show(firstValue.ToString());
}
这对你有用吗?正如前面的回答中提到的,这没有考虑到操作的顺序,还有很多其他可能需要进行的错误检查。
using System.Text.RegularExpressions;
private void button1_Click(object sender, EventArgs e)
{
MatchCollection values = Regex.Matches(textBox1.Text, "[0-9]+");
MatchCollection operations = Regex.Matches(textBox1.Text, @"[\/\*\+-]");
if (values.Count == operations.Count + 1)
{
int total = int.Parse(values[0].Value);
if (operations.Count > 0)
{
for (int index = 1; index < values.Count; index++)
{
int value = int.Parse(values[index].Value);
switch (operations[index - 1].Value)
{
case "+":
total += value;
break;
case "-":
total -= value;
break;
case "/":
total /= value;
break;
case "*":
total *= value;
break;
}
}
}
MessageBox.Show(total.ToString());
}
}
可以使用NCalc库。您可以这样使用它:
NCalc.Expression e = new NCalc.Expression(textBox1.Text);
double value = e.Evaluate();
// Next, do something with your evaluated value.
如果要从头到尾解析字符串并在解析过程中进行计算,则在拥有两个操作数之前,无法在两个值之间进行计算。这意味着您必须等待找到第二个运算符(或字符串的结尾),直到可以对第一个运算符进行计算。
当您解析这个数字时,把它放在第二个值变量中。如果它是第一个值,那么只需将其移动到firstValue
并继续获取另一个值,否则使用您根据上一个运算符拥有的两个值进行计算。
要包含最后一次计算,可以在字符串中的最后一个字符之外循环一个步骤。这允许您的循环在最后一个值之后再运行一次,您可以进行最后一次计算。不过,它还需要一些检查,这样您就不会真正尝试从字符串之外的位置读取。
要处理负值,应将其包含在值中,而不是使用-
运算符。否则,您还需要-
、*-
和/-
运算符。
示例(未测试):
private void button1_Click(object sender, EventArgs e) {
string allValue = textBox1.Text;
int firstValue = 0;
int secondValue = 0;
string second = string.Empty;
string op = string.Empty;
for (int i = 0; i <= allValue.Length; i++) {
if (i < allValue.Length && (Char.IsNumber(allValue[i]) || (char == '-' && second.Length == 0))) {
second += allValue[i];
} else if (i == allValue.Length || "+-*/".indexOf(allValue[i]) != -1) {
secondValue = Int32.Parse(second);
if (op.Length > 0) {
switch (op) {
case "+": firstValue += secondValue; break;
case "-": firstValue -= secondValue; break;
case "*": firstValue *= secondValue; break;
case "/": firstValue /= secondValue; break;
}
} else {
firstValue = secondValue;
}
if (i < allValue.Length) {
op = allValue[i].ToString();
}
second = "";
} else {
// illegal formula
}
}
MessageBox.Show(firstValue.ToString());
}
注意:这严格地从左到右计算,并且不处理优先级,例如1 2*3
被计算为(1 2)*3
,而不是通常使用的1(2*3)
。
我正在尝试网络抓取,我需要模拟对buttoN的点击,我已经尝试过了: 并返回此错误: selenium . common . exceptions . nosuchelementexception:消息:没有这样的元素:找不到元素:{"method":"xpath "," selector ":"//*[@ id = " CTL 00 _ CP h1 _ BtnTipoGobierno "]" }
我需要帮助创建一个div,当你点击一个按钮时,里面有自定义超文本标记语言的div会被创建。 如果这是可能的(很可能是),我正在制作一个邮箱。 谢谢!!!
我想使用泛型制作数组。 但出现编译错误。 如何使用泛型制作数组?
我用‘固定’使‘导航’不动。然而,如果有一个“标题”,则有一个与“标题”区域一样多的边距。在向上移动了多少‘头部’区域后,我想把它固定在那个位置。我在用“反应”所以很难找到方法。我正在自学,所以我原来知道的不多,所以我来学习一些新的东西。 null null
我想用快捷键做动作。
我想我的问题是我有两个“OnCreateDialog”,一个用于myDialogfragment,一个用于日期选择器。 有人能帮忙或建议吗?