C# 计算器问题:我只输入了第二个值

C# 计算器问题:我只输入了第二个值,c#,calculator,C#,Calculator,我创建了一个基本的计算器,但每次输入第二个值并按下“相等”按钮时,都没有返回结果。只有我输入的值是2。 我的+-*/方法在一个单独的类中。解决这个问题的最好办法是什么?这可能是个简单的错误,但我找不到。你能给我解释一下我做错了什么吗。提前谢谢 public sealed partial class Calculator : Page { public double num01, num02; int operater; public Calculator() {

我创建了一个基本的计算器,但每次输入第二个值并按下“相等”按钮时,都没有返回结果。只有我输入的值是2。 我的+-*/方法在一个单独的类中。解决这个问题的最好办法是什么?这可能是个简单的错误,但我找不到。你能给我解释一下我做错了什么吗。提前谢谢

public sealed partial class Calculator : Page
{
    public double num01, num02;
    int operater;

    public Calculator()
    {
        this.InitializeComponent();
    }

    private void btn1_Click(object sender, RoutedEventArgs e)
    {
        txtcalcdisplay.Text =txtcalcdisplay.Text+ "1";          
    }

    private void btn2_Click(object sender, RoutedEventArgs e)
    {
        txtcalcdisplay.Text = txtcalcdisplay.Text + "2";            
    }

    private void btn3_Click(object sender, RoutedEventArgs e)
    {
        txtcalcdisplay.Text = txtcalcdisplay.Text + "3";
    }

    private void btn4_Click(object sender, RoutedEventArgs e)
    {
        txtcalcdisplay.Text = txtcalcdisplay.Text + "4";        
    }

    private void btn5_Click(object sender, RoutedEventArgs e)
    {
        txtcalcdisplay.Text = txtcalcdisplay.Text + "5";
    }

    private void btn6_Click(object sender, RoutedEventArgs e)
    {
        txtcalcdisplay.Text = txtcalcdisplay.Text + "6";
    }

    private void btn7_Click(object sender, RoutedEventArgs e)
    {
        txtcalcdisplay.Text = txtcalcdisplay.Text + "7";
    }

    private void btn8_Click(object sender, RoutedEventArgs e)
    {
        txtcalcdisplay.Text = txtcalcdisplay.Text + "8";
    }

    private void btn9_Click(object sender, RoutedEventArgs e)
    {
        txtcalcdisplay.Text = txtcalcdisplay.Text + "9";
    }

    private void Clear_Click(object sender, RoutedEventArgs e)
    {
        txtcalcdisplay.Text = string.Empty;
    }

    private void btnsubtract_Click(object sender, RoutedEventArgs e)
    {
        num01 = Convert.ToDouble(txtcalcdisplay.Text);
        txtcalcdisplay.Text = "";
        operater = '1';
    }

    private void btnadd_Click(object sender, RoutedEventArgs e)
    {
        num01 = Convert.ToDouble(txtcalcdisplay.Text);
        txtcalcdisplay.Text = "";
        operater = '2';
    }

    private void btnmultiply_Click(object sender, RoutedEventArgs e)
    {
        num01 = Convert.ToDouble(txtcalcdisplay.Text);
        txtcalcdisplay.Text = "";
        operater = '3';
    }

    private void btndivide_Click(object sender, RoutedEventArgs e)
    {
        num01 = Convert.ToDouble(txtcalcdisplay.Text);
        txtcalcdisplay.Text = "";
        operater = '4';
    }

    private void btnequals_Click(object sender, RoutedEventArgs e)
    {
        switch (operater)
        {
            case 1:
                num02 = Convert.ToDouble(txtcalcdisplay.Text);
                CalculationClass sub = new CalculationClass();
                double answer= sub.Subtract(num01, num02);
                txtcalcdisplay.Text = answer.ToString();
                break;

            case 2:
                num02 = Convert.ToDouble(txtcalcdisplay.Text);
                CalculationClass add = new CalculationClass();
                answer= add.Addition(num01, num02);
                txtcalcdisplay.Text = answer.ToString();
                break;

            case 3:
                num02 = Convert.ToDouble(txtcalcdisplay.Text);
                CalculationClass mult = new CalculationClass();
                answer = mult.Multiply(num01, num02);
                txtcalcdisplay.Text = answer.ToString();
                break;

            case 4:
                num02 = Convert.ToDouble(txtcalcdisplay.Text);
                CalculationClass div = new CalculationClass();
                answer = div.Div(num01, num02);
                txtcalcdisplay.Text = Convert.ToString(answer);
                break;
        }
    }

    private void btnback_Click(object sender, RoutedEventArgs e)
    {
    }

    private void btnplusdivideminus_Click(object sender, RoutedEventArgs e)
    {
    }

    private void btncomma_Click(object sender, RoutedEventArgs e)
    {
    }

    private void btngallery_Click(object sender, RoutedEventArgs e)
    {
    }

    private void btncontact_Click(object sender, RoutedEventArgs e)
    {
    }

    private void num0_Click(object sender, RoutedEventArgs e)
    {
        txtcalcdisplay.Text += "0";
        num01 = Convert.ToDouble(txtcalcdisplay.Text);
    }
}


class CalculationClass
{
    double answer;

    public double Addition(double x, double y)
    {
        answer = x + y;
        return answer;
    }

    public double Subtract(double x, double y)
    {
        answer = x - y;
        return answer;
    }

    public double Multiply(double x, double y)
    {
        answer = x * y;
        return answer;
    }

    public double Div(double x, double y)
    {
        answer = x / y;
        return answer;
    }
}

我不是100%确定,但我相当肯定这与变量
运算符
int
这一事实有关,但您正在为它分配一个字符(这很有效-可以将字符分配给int),然后将其与整数进行比较(例如执行
1='1'

因此,要解决此问题,请使用交换机中的字符:

switch(operater){
   case '1': ...
}
或者指定整数1,2,3,4,而不是字符“1”、“2”、“3”和“4”

private void btnadd_Click(object sender, RoutedEventArgs e)
{
    num01 = Convert.ToDouble(txtcalcdisplay.Text);
    txtcalcdisplay.Text = "";
    operater = 2; // here
}

因此,在运算符单击处理程序(用于+、-、*、/等的处理程序)中,您正在将
运算符
变量设置为字符
'1'
'2'
,等等。嗯,
运算符
变量是一个int。但是,等等,您不应该能够将
字符
分配给
int
?!编译器在这里进行隐式转换()

因此,当您执行
operater='1'
时,结果是
operater
被分配了49(
'1'
的ASCII值)。然后,当您到达equals按钮单击处理程序时,它会点击那个switch语句。你猜怎么着?你没有49岁的理由。所以什么也没发生,你一直在屏幕上看到你的第二个数字

因此,要修复它,请删除运算符处理程序中分配给
operater
的数字周围的单引号。即:

private void btnsubtract_Click(object sender, RoutedEventArgs e)
{
    num01 = Convert.ToDouble(txtcalcdisplay.Text);
    txtcalcdisplay.Text = "";
    operater = 1;  // <-- change this line to be like this, removed the single quotes
}
private void btnsubtract\u单击(对象发送方,路由目标)
{
num01=Convert.ToDouble(txtcdalcdisplay.Text);
txtcdcdisplay.Text=“”;

operater=1;//最好的办法是弹出调试器,在事件处理程序上为equals按钮设置一个断点,然后逐步执行操作。是的,如果不使用XAML,很难看到可能出现错误的地方。是否所有运算符都会发生此错误(即,加法、减法、乘法和除法),还是只有一个?如果是,哪一个?请尝试提供一个。这可能表明了您的错误,并使我们更容易查看您的问题(如果问题仍然存在)。顺便说一句,谢谢,您拼写的“operator”错误。这不是问题的根源,但这足以困扰我提及它。是的,所有的operator都会出现这种情况。
private void btnsubtract_Click(object sender, RoutedEventArgs e)
{
    num01 = Convert.ToDouble(txtcalcdisplay.Text);
    txtcalcdisplay.Text = "";
    operater = 1;  // <-- change this line to be like this, removed the single quotes
}