当前位置: 首页 > 知识库问答 >
问题:

我想用一个按钮C做数学运算#

澹台文博
2023-03-14

我想用一个按钮和文本框进行数学运算,当输入文本框操作如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());
    }

共有3个答案

盖锐
2023-03-14

这对你有用吗?正如前面的回答中提到的,这没有考虑到操作的顺序,还有很多其他可能需要进行的错误检查。

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());
    }
}
裴建华
2023-03-14

可以使用NCalc库。您可以这样使用它:

NCalc.Expression e = new NCalc.Expression(textBox1.Text);
double value = e.Evaluate();
// Next, do something with your evaluated value.
韦欣德
2023-03-14

如果要从头到尾解析字符串并在解析过程中进行计算,则在拥有两个操作数之前,无法在两个值之间进行计算。这意味着您必须等待找到第二个运算符(或字符串的结尾),直到可以对第一个运算符进行计算。

当您解析这个数字时,把它放在第二个值变量中。如果它是第一个值,那么只需将其移动到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,一个用于日期选择器。 有人能帮忙或建议吗?