繁体   English   中英

解析文本时发生System.FormatException

[英]System.FormatException occurs when parsing text

我是这里的新手,也是C#的新手,所以请保持友好。 我正在编程课程的作业中,无法终生解决问题。 该程序是一个计算器,它从两个文本框输入并对其进行操作,并禁用第二个文本框,并使用按钮输入数字(数字键盘)。 我使用的是Visual Studio 2013,并且遍历了我的代码多次。 这是我的代码:

    static int checkFocusedTextbox = 1;
    string operationPerformed;
    double result = 0;

    private void Operator_Click(object sender, RoutedEventArgs e)
    {
       // try
      //  {
            Button button = (Button)sender;
            operationPerformed = button.Content.ToString();
            double num1 = double.Parse(inputOne.Text);
            double num2 = double.Parse(inputTwo.Text);

            if (checkFocusedTextbox == 1)
            {
                if ((inputOne.Text == "") || (inputTwo.Text == ""))
                {
                    error.Text = "Please fill both text fields";
                }
                else if ((inputOne.Text != "") || (inputTwo.Text != ""))
                {
                    switch ((string)button.Tag)
                    {
                        case "+":
                            inputOne.Clear();
                            inputTwo.Focus();
                            result = num1 + num2;
                            break;
                        case "-":
                            inputOne.Clear();
                            num2 = double.Parse(inputOne.Text);
                            result = num1 + num2;
                            break;
                        case "*":
                            inputOne.Clear();
                            num2 = double.Parse(inputOne.Text);
                            result = num1 + num2;
                            break;
                        case "/":
                            inputOne.Clear();
                            num2 = double.Parse(inputOne.Text);
                            result = num1 / num2;
                            break;
                        case "%":
                            inputOne.Clear();
                            num2 = double.Parse(inputOne.Text);
                            result = num1 % num2;
                            break;
                        default:
                            break;
                    }
                    output.Text = result.ToString();
                }
            }
            else
            {
                Calculation(num1, num2);
                output.Text = result.ToString();
            }
    }

    public void Calculation(double number1, double number2)
    {
        switch (operationPerformed)
        {
            case "+":
                result = number1 + number2;
                break;
            case "-":
                result = number1 - number2;
                break;
            case "*":
                result = number1 * number2;
                break;
            case "/":
                result = number1 / number2;
                break;
            case "%":
                result = number1 % number2;
                break;
            default:
                break;
        }
    }

    public void CalculationNumberpad()
    {

    }

    private void NumberPad_Click(object sender, RoutedEventArgs e)
    {
        Button button = (Button)sender;
        inputOne.Text += button.Content.ToString();
    }

    private void inputTwo_GotFocus(object sender, RoutedEventArgs e)
    {
        checkFocusedTextbox = 2;
    }

    private void inputOne_GotFocus(object sender, RoutedEventArgs e)
    {
        checkFocusedTextbox = 1;
    }
}

}

Button类成功检索到按钮的单击并进入operationPerformed变量。 这已在我的代码的顶部声明为字符串,因此,由于使用ToString(),所以我不明白为什么会出错。 然后进入num1 double并给出错误。

我非常需要帮助,我知道这个社区是最好的! 如果我遗漏了任何信息,请原谅我。

谢谢克里斯

您正在这样做:

   double num1 = double.Parse(inputOne.Text);
   double num2 = double.Parse(inputTwo.Text);

在检查inputOne或inputTwo的内容是否为空之前。 如果其中一个为空或包含无法解析为双精度型的字符串,则Parse行将引发System.FormatException。

看一看double.TryParse来检查是否可以解析某些内容而不会引发异常。 所以像:

double num1, num2;
if (double.TryParse(inputOne.Text, out num1) && double.TryParse(inputTwo.Text, out num2))
{ ... values are valid, so do things}
else
{ ... at least one value is not valid... warn user }

这些条件是错误的:(inputOne.Text!=“”)|| (inputTwo.Text!=“”)

要测试字符串是否相等,请使用str1.Equals(str2); 也与A ||相反 B是!A &&!B

更好的测试是string.IsNullorEmpty(teststring);

你在做这个

inputOne.Clear();   // this makes the TextBox empty

然后这个

num2 = double.Parse(inputOne.Text);   // How can you parse an empty text

在这里改变像

case "-":
    num2 = double.Parse(inputOne.Text);  // First take the value
    inputOne.Clear();                    // Then clear
    result = num1 + num2;                // Then Calculate
    break;

为了进行比较

else if ((inputOne.Text != "") || (inputTwo.Text != ""))

你已经确定,无论是文本框填写,那么这将永远是true,所以只是简单的别的人

替换为

else   // that's enough

在这里从按钮取操作员标志的同时

switch ((string)button.Tag)

它不是您需要的标签 您需要的是按钮的内容

更改为

switch ((string)button.Content.ToString())

您如何填充inputTwo文本框?

Button button = (Button)sender;
inputOne.Text += button.Content.ToString();

在这里,您只能选择填写inputOne

所以在这里改变像

Button button = (Button)sender;
if (checkFocusedTextbox == 1)
     inputOne.Text += button.Content.ToString();
 else
     inputTwo.Text += button.Content.ToString();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM