簡體   English   中英

計算器 GUI 問題

[英]Calculator GUI problems

我在大學一年級編程的第一個學期,我們的任務是制作一個計算器 GUI。 我快完成了,但如果分母為 0 但它輸出 0.0,我需要使“錯誤”出現。 我的另一個問題是,我需要在顯示最終答案后重新啟動 gui,但發生的情況是,在我單擊等於然后單擊它繼續的數字之后。 因此,如果我按 1+1 然后單擊 =,它會輸出 2,但是當我單擊一個數字(例如 1)時,它就會變成 21。

另外,如何在每個答案的末尾刪除 .0 ? 我在每個方程式之后嘗試了 endWith 和 replace ,但它不起作用。

 @Override
public void actionPerformed(ActionEvent e){
    for(int i=0;i<10;i++) {
        if(e.getSource() == numbers[i]) {
            text.setText(text.getText().concat(String.valueOf(i)));
        }
    }
    if(e.getSource()==dec) {
        if (text.getText().contains(".")) {
            return;
        } else {
            text.setText(text.getText() + ".");
        }
    }
    if(e.getSource()==add) {
        num1 = Double.parseDouble(text.getText());
        operator ='+';
        label.setText(text.getText() + "+");
        text.setText("");
    }
    if(e.getSource()==sub) {
        num1 = Double.parseDouble(text.getText());
        operator ='-';
        label.setText(text.getText() + "-");
        text.setText("");
    }
    if(e.getSource()==mult) {
        num1 = Double.parseDouble(text.getText());
        operator ='*';
        label.setText(text.getText() + "*");
        text.setText("");
    }
    if(e.getSource()==div) {
        num1 = Double.parseDouble(text.getText());
        operator ='/';
        label.setText(text.getText() + "/");
        text.setText("");
    }
    if(e.getSource()==neg) {
        Double neg = Double.parseDouble(text.getText());
        neg*=-1;
        text.setText(String.valueOf(neg));
    }
    if(e.getSource()==per) {
        num1 = Double.parseDouble(text.getText())/100;
        label.setText(text.getText() + "%");
        text.setText(String.valueOf(num1));
        label.setText("");
    }
    
    
    if(e.getSource()==equ) {
        num2=Double.parseDouble(text.getText());
        switch(operator) {
        case'+':
            ans=num1+num2;
            break;
        case'-':
            ans=num1-num2;
            break;
        case'*':
            ans=num1*num2;
            break;
        case'/':
            if (num2==0)
                text.setText("Error");
                else
                    ans=num1/num2;
            break;
        }
        label.setText("");
        text.setText(String.valueOf(ans));
    }
    }
    }   
    }
  • 關於在分母為零時顯示“錯誤”的第一個問題。
    當您按下“=”按鈕時,您首先進入 switch(operator) 語句的“/”分支。 在那里您檢查 num2 是否等於零並將文本字段設置為“錯誤”。 但是,之后退出 switch 語句並繼續label.setText(""); 其次是text.setText(String.valueOf(ans)); . 因為 ans 的當前值為零,所以最后一條語句將文本字段的值設置為“0.0”,覆蓋之前的“Error”值。 有不同的方法來處理它。 現在,當您了解問題的原因后,您可以嘗試自己找到解決方案。

  • 關於您關於如何重置計算器的 state 的第二個問題。 例如,您可以創建一個 boolean state 變量,如果計算器已准備好進行新輸入,則該變量為 true,如果它處於某個輸入的中間,則該變量為 false。 您將這個 state 變量初始化為 true,然后每次按下某個按鈕時將其設置為 false。 如果 state 變量為真,則將文本字段重置為空字符串,然后再將 append 給它一個數字。 最后,在用戶按下“=”按鈕后,將 state 變量設置回 true。 因此,您可以執行以下操作:

// We reset the text field to an empty string at the start of each calculation
if (state) { 
  text.setText("");
}

// Here is your code

.....

// And at the very end:
// Change the state to false if user pressed anything except the equality sign
state = e.getSource()==equ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM