亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算器問題:只得到我輸入的第二個值

計算器問題:只得到我輸入的第二個值

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 關注
  • 223 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號