1

練習のために、完全に機能する電卓を作成しようとしています。以下のコードの ActionListener クラスをコピーしました。ユーザー入力を取得し、整数/倍精度として保存するこの方法は、基本的すぎてすべての場合に機能するとは限らないため、うまく機能しないように感じます。コードを構造化し、2 つの数字と記号のユーザー入力を取得し、基本的に完全に機能する GUI 電卓を作成する方法を誰かが見つけ出すのを手伝ってくれるかどうか疑問に思っていました。私の問題は、JButton からユーザー入力を取得し、電卓のように数値として保存し (1 を 2 回押す == 11)、それを後の計算に使用することです。

この点についてアドバイスをいただければ幸いです。

private class TheHandler implements ActionListener{
            public void actionPerformed(ActionEvent event){
                while(equals!=event.getSource())
                    if(one==event.getSource()){
                       result.setText("1");
                       num1=1;
                    }
                    else if(two==event.getSource()){
                       result.setText("2");

                    }
                    else if(three==event.getSource()){
                       result.setText("3");
                    }
                    else if(four==event.getSource()){
                       result.setText("4");
                    }
                    else if(five==event.getSource()){
                       result.setText("5");
                    }
                    else if(six==event.getSource()){
                       result.setText("6");
                    }
                    else if(seven==event.getSource()){
                       result.setText("7");
                    }
                    else if(eight==event.getSource()){
                       result.setText("8");
                    }
                    else if(nine==event.getSource()){
                        result.setText("9");
                    }
                    else if(zero==event.getSource()){
                        result.setText("0");
                    }
                }
            }
4

3 に答える 3

3

whileはまったく削除する必要があります。

次のような数値変数を使用することをお勧めします

long num = 0;
int digit;

各イベントは数字を設定するだけです

 ...
 else if(nine==event.getSource()){
     digit = 9;
 } else if(zero==event.getSource()){
     digit = 0;
 }
...
num = num * 10 + digit;
...
result.setText(Long.toString(num));
于 2012-06-01T13:49:11.347 に答える
2

ディスプレイの現在の状態を格納し、それをテキストの設定に使用するクラス メンバー変数はどうでしょうか。

private class TheHandler implements ActionListener{
    String display = "";
    public void actionPerformed(ActionEvent event){
        while(equals!=event.getSource()){
            if(one==event.getSource()){
                display=display+"1";

            }
            ..... 
        }
        result.setText(display);
    }
}
于 2012-06-01T13:47:05.317 に答える
1

各ボタンを次のような番号に、より明確に関連付けることができます。

private class TheHandler implements ActionListener{
  private Map<Object, String> numbers = new HashMap<Object, String>();
  {
    numbers.put(zero, "0");
    numbers.put(one, "1");
    ...
  }
  public void actionPerformed(ActionEvent event){
    Object source = event.getSource();
    while(equals != source){
      String number = numbers.get(source);
      if (number != null){
        result.setText(number);
      }
    }
  }
}
于 2012-06-01T14:40:03.603 に答える