计算器问题:只得到我输入的第二个值

我创建了一个基本的计算器,但是每次我输入第二个值并按下相等按钮时,我都没有得到任何结果。只有我第二次输入的值。我的 +-*/ 方法在一个单独的类中。解决此问题的最佳方法是什么?这可能是一个简单的错误,但我找不到它。你能否也请给我解释一下我做错了什么。提前致谢。


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';

    }


qq_遁去的一_1
浏览 184回答 2
2回答

慕姐8265434

我不是 100% 确定,但我相当确定这与您的变量operater是 anint但您正在为其分配一个字符的事实有关(这是有效的 - 字符可以分配给 int)然后比较它回到整数(例如做1 == '1')int x = '1';Console.WriteLine(x); // outputs 49Console.WriteLine(x == 1); // outputs false因此,要修复它,请使用 switch 中的字符: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}

慕尼黑5688855

因此,在您操作的点击处理程序(药粥+, - ,*,/等)你是你设定operater变量角色'1','2'等好了,你的operater变量是一个int。但是等等,您不应该将 a 分配char给 anint吗?!好吧,编译器在这里做了一个隐式转换(语言规范说它应该)。因此,当您这样做时,最终会发生的operater = '1'是operater分配了 49 ('1'的 ASCII 值)。然后当你到达你的 equals 按钮点击处理程序时,它会点击那个 switch 语句。你猜怎么着?你没有 49 的情况。所以什么也没发生,你一直看到你的第二个数字作为屏幕上的文本。因此,要修复它,请删除您operater在操作员处理程序中分配给的数字周围的单引号。IE:private void btnsubtract_Click(object sender, RoutedEventArgs e){&nbsp; &nbsp; num01 = Convert.ToDouble(txtcalcdisplay.Text);&nbsp; &nbsp; txtcalcdisplay.Text = "";&nbsp; &nbsp; operater = 1;&nbsp; // <-- change this line to be like this, removed the single quotes}
打开App,查看更多内容
随时随地看视频慕课网APP