2017-02-14 3 views
0

私はこのactionPerformedメソッドを私の電卓プログラムに実装しようとしています。私は、ボタンを表示し、押されたときに計算を実行するループを作成するのに問題があります。ところで、if文を使ってこれを行うと問題を解決できますが、コードをきれいにしたいのです。loopを使用してactionPerformedを実行する(クリックボタンで)

 String expr1 = ""; 

     private static final String[] bText = {"7", "8", "9", "+", "4", "5", "6", "- ", "1", "2", "3", "*", "0", ".", "=", "/", "(", ")", "C", "CE"}; 
     Button[] buttons = new Button[ bText.length ]; 

     public void actionPerformed(ActionEvent arg0) { 

     String input = textField.getText(); 

     // Trying to get the first 12 items for testing 
     for(int index = 0; index <=12; index++) 
     { 
      if(arg0.getSource()==buttons[index]) 
      { 

       if(input.contains("1,2,3,4,5,6,7,8,9,0")) 
       { 
       textField.setText(input + bText[index]); 
       expr1 = expr1 + index; 
       } 
       if(input.contains("+-*/")){ 
        expr1 = expr1 + bText[index]; 
       textField.setText(""); 
       } 
      } 

     }  
      for(int i=13; i <=16; i++){ 
       if(arg0.getSource()==buttons[i]){ 
      expr1 = expr1 + bText[i]; 
       textField.setText(""); 

      } 
      } 
     /** 
      If I do this one by one using if statements I can fix my problem but I want to make my code cleaner. 

      */ 


      //For CE button 
      if (arg0.getSource() == buttons[18]) { 
      String s = textField.getText().toString(); 
      s = s.substring(0, s.length() - 1); 
      textField.setText(s); 

      } 
       else if(arg0.getSource()==buttons[17]) { 
       textField.setText(""); 
       expr1 = "";  
      } 
     // This will calculate expressins. This is a "=" button 
     else if (arg0.getSource() == buttons[19]) { 
       System.out.println(expr1); 
       textField.setText("" + Integer.toString(calculatorEvaluator.eval(expr1))); 
      } 


     } 
+1

説明し、より良い、それは、より読みやすいですので、あなたのコードをフォーマットしてください...あなたが決定することが可能になりますあなたの問題。あなたは何の問題を抱えているのですか? – ChiefTwoPencils

+0

イベントからボタンにアクセスするには、 'JButton btn =(JButton)arg0.getSource();'を実行します。実行するアクションを判断するために 'getText'または' getActionCommand'を使用する必要があります – MadProgrammer

+0

私は不思議でしたforループを使用してコードの長さを最小限に抑える方法。私がif文を使用すると、if文を20個使用しなければならず、もっと短い方法があるかどうか疑問に思っていました。すなわち、ループ。フォーマットして申し訳ありません、私はそれをやります。 – user7062312

答えて

1

私はActionのAPIを使用して、この問題にアプローチを考えることができる方法がたくさんあるが、おそらく私の最も好ましいが、ここでは要件の範囲を超えることがあります はここに私のコードです。

私はあなたがループを使う必要はないと思っています。私はあなたに他のアプローチよりも利点を与えるとは思わないのです。

たとえば、Stringを正規表現のサポートで作成し、ボタンのテキストを確認するだけで済みます。テキストは、例えば数やオペレータや他のいくつかのコマンドである場合、

これは、少なくとも、

private final String[] bText = {"7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0", ".", "=", "/", "(", ")", "C", "CE"}; 
private JButton[] buttons = new JButton[bText.length]; 

public TestPane() { 
    setLayout(new GridLayout(0, 3)); 
    for (int index = 0; index < bText.length; index++) { 
     String text = bText[index]; 
     JButton btn = new JButton(text); 
     buttons[index] = btn; 
     btn.addActionListener(this); 
     add(btn); 
    } 
} 

@Override 
public void actionPerformed(ActionEvent e) { 
    Object source = e.getSource(); 
    if (source instanceof JButton) { 
     JButton btn = (JButton)source; 
     String text = btn.getText(); 
     if (text.matches("^[0-9]")) { 
      System.out.println(text + " is a number"); 
     } else if (text.matches("^[=/\\(\\)*=\\-\\+]")) { 
      System.out.println(text + " is an operator"); 
     } else { 
      System.out.println(text + " is some other command"); 
     } 
    } 
} 
関連する問題