为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
qq_遁去的一_1 2021-10-24 19:41:22
我创建了一个基本的计算器,但是每次我输入第二个值并按下相等按钮时,我都没有得到任何结果。只有我第二次输入的值。我的 +-*/ 方法在一个单独的类中。解决此问题的最佳方法是什么?这可能是一个简单的错误,但我找不到它。你能否也请给我解释一下我做错了什么。提前致谢。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';    }
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

我不是 100% 确定,但我相当确定这与您的变量operater是 anint但您正在为其分配一个字符的事实有关(这是有效的 - 字符可以分配给 int)然后比较它回到整数(例如做1 == '1')


int x = '1';

Console.WriteLine(x); // outputs 49

Console.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

}


查看完整回答
反对 回复 2021-10-24
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

因此,在您操作的点击处理程序(药粥+, - ,*,/等)你是你设定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)

{

    num01 = Convert.ToDouble(txtcalcdisplay.Text);

    txtcalcdisplay.Text = "";

    operater = 1;  // <-- change this line to be like this, removed the single quotes

}


查看完整回答
反对 回复 2021-10-24
  • 2 回答
  • 0 关注
  • 183 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信