2011-12-04 11 views
2

プログラムに問題があり、間違った結果が表示されています.1桁の計算を実行しようとするとエラーが発生します。以下に掲示されたプログラムは、どんな助けもありがとう。Java計算機で間違った結果が表示される

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class Calc extends JFrame{ 
public static void main(String[] args){ 
    Calc myFrame = new Calc(); 
    myFrame.pack(); 
    myFrame.setTitle("Calculator"); 
    myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    myFrame.setLocationRelativeTo(null); 
    myFrame.setVisible(true); 
}//main 


private JTextField jtfNum1, jtfNum2, jtfResult; 
private JButton jbtAdd, jbtSub, jbtMul, jbtDiv, jbt1, jbt2, jbt3, jbt4, jbt5, jbt6, jbt7, jbt8, jbt9, jbt0, jbtDec, jbtC, jbtE, jbtClear; 
double number1 = 0; 
double number2 = 0; 
double result = 0; 
String display = ""; 
String display1 =""; 
char oper = ('A'); 

public Calc(){ 
    JPanel p1 = new JPanel(); 
    p1.setLayout(new GridLayout(5,4)); 
    p1.add(jbt1 = new JButton("1")); 
    p1.add(jbt2 = new JButton("2")); 
    p1.add(jbt3 = new JButton("3")); 
    p1.add(jbtAdd = new JButton("+")); 
    p1.add(jbt4 = new JButton("4")); 
    p1.add(jbt5 = new JButton("5")); 
    p1.add(jbt6 = new JButton("6")); 
    p1.add(jbtSub = new JButton("-")); 
    p1.add(jbt7 = new JButton("7")); 
    p1.add(jbt8 = new JButton("8")); 
    p1.add(jbt9 = new JButton("9")); 
    p1.add(jbtMul = new JButton("*")); 
    p1.add(jbt0 = new JButton("0")); 
    p1.add(jbtClear = new JButton("CE")); 
    p1.add(jbtE = new JButton("=")); 
    p1.add(jbtDiv = new JButton("/")); 

    JPanel p2 = new JPanel(new BorderLayout()); 
    p2.add(jtfResult = new JTextField(8), BorderLayout.NORTH); 
    p2.add(p1, BorderLayout.CENTER); 
    jtfResult.setEditable(false); 

    this.setLayout(new BorderLayout()); 
    this.add(p2, BorderLayout.CENTER); 

    jbt1.addActionListener(new myListener()); 
    jbt2.addActionListener(new myListener()); 
    jbt3.addActionListener(new myListener()); 
    jbt4.addActionListener(new myListener()); 
    jbt5.addActionListener(new myListener()); 
    jbt6.addActionListener(new myListener()); 
    jbt7.addActionListener(new myListener()); 
    jbt8.addActionListener(new myListener()); 
    jbt9.addActionListener(new myListener()); 
    jbt0.addActionListener(new myListener()); 
    jbtAdd.addActionListener(new myListener()); 
    jbtDiv.addActionListener(new myListener()); 
    jbtSub.addActionListener(new myListener()); 
    jbtMul.addActionListener(new myListener()); 
    jbtE.addActionListener(new myListener()); 
    jbtClear.addActionListener(new myListener()); 

} 

class myListener implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     String actionCommand = e.getActionCommand(); 
     if ("1".equals(actionCommand)){ 
     display = jtfResult.getText(); 
     jtfResult.setText(display + "1"); 
     } 
     else if ("2".equals(actionCommand)){ 
     display = jtfResult.getText(); 
     jtfResult.setText(display + "2"); 
     } 
     else if ("3".equals(actionCommand)){ 
     display = jtfResult.getText(); 
     jtfResult.setText(display + "3"); 
     } 
     else if ("4".equals(actionCommand)){ 
     display = jtfResult.getText(); 
     jtfResult.setText(display + "4"); 
     } 
     else if ("5".equals(actionCommand)){ 
     display = jtfResult.getText(); 
     jtfResult.setText(display + "5"); 
     } 
     else if ("6".equals(actionCommand)){ 
     display = jtfResult.getText(); 
     jtfResult.setText(display + "6"); 
     } 
     else if ("7".equals(actionCommand)){ 
     display = jtfResult.getText(); 
     jtfResult.setText(display + "7"); 
     } 
     else if ("8".equals(actionCommand)){ 
     display = jtfResult.getText(); 
     jtfResult.setText(display + "8"); 
     } 
     else if ("9".equals(actionCommand)){ 
     display = jtfResult.getText(); 
     jtfResult.setText(display + "9"); 
     } 
     else if ("0".equals(actionCommand)){ 
     display = jtfResult.getText(); 
     jtfResult.setText(display + "0"); 
     } 
     else if ("+".equals(actionCommand)){ 
     display1 = display; 
     oper = '+'; 
     jtfResult.setText(""); 
     } 
     else if ("-".equals(actionCommand)){ 
     oper = '-'; 
     display1 = display; 
     jtfResult.setText(""); 
     } 
     else if ("/".equals(actionCommand)){ 
     oper = '/'; 
     display1 = display; 
     jtfResult.setText(""); 
     } 
     else if ("*".equals(actionCommand)){ 
     oper = '*'; 
     display1 = display; 
     jtfResult.setText(""); 
     } 
     else if("=".equals(actionCommand)){ 
      solve(); 
      System.out.println(display1); 
      System.out.println(display); 
     } 
     else if ("CE".equals(actionCommand)){ 
     jtfResult.setText(""); 
     } 
    }//Action Performed 
} 

public void solve(){ 
number1 = Double.parseDouble(display1); 
number2 = Double.parseDouble(display); 
jtfResult.setText(""); 
if (oper == '+'){ 
    result = number1 + number2; 
    String stringResult = Double.toString(result); 
    jtfResult.setText(stringResult); 
    } 
else if (oper == '-'){ 
    result = number1 - number2; 
    String stringResult = Double.toString(result); 
    jtfResult.setText(stringResult); 
    } 
else if (oper == '*'){ 
    result = number1 * number2; 
    String stringResult = Double.toString(result); 
    jtfResult.setText(stringResult); 
    } 
else if (oper == '/'){ 
    if (number2 == 0) 
     jtfResult.setText("ERROR"); 
    else  
    result = number1/number2; 
    String stringResult = Double.toString(result); 
    jtfResult.setText(stringResult);  
    } 
} 

} 
+1

よう

class myListener implements ActionListener { public void actionPerformed(ActionEvent e) { String actionCommand = e.getActionCommand(); if ("=".equals(actionCommand)) { solve(); System.out.println(display1); System.out.println(display); } else if ("CE".equals(actionCommand)) { jtfResult.setText(""); } else { processInputReceived(actionCommand); } }// Action Performed } 

そして、あなたのprocessInputReceived * "あなたはエラーになります。" *どのようなエラー?私たちに推測させるのではなく、常にエラー出力をコピー/ペーストしてください。脇に、質問することを忘れないでください。 –

+0

あなたのコードに、特にエラーの場所の前に、printlnを配置してください。あなたがコンピュータであるかのようにコードを論理的に歩きます。そうすれば、あなたが行っていると思うように、表示を変えないでください(そして拡大表示1)。 –

答えて

1

jtfResultから現在の値を取得する必要があります。

public void actionPerformed(ActionEvent e){ 
     display = jtfResult.getText(); //<-------- 
     String actionCommand = e.getActionCommand(); 
     ..... 
1

あなたの問題は、ここにも

jtfResult.setText(display + "1"); 
display = jtfResult.getText(); 

から

display = jtfResult.getText(); 
jtfResult.setText(display + "1"); 

変更、それをどのオペレータがクリックされるたびに、あなたの表示文字列をクリアする必要があります。

副読本に重複したコードブロックを書くことは避けてください。問題を解決するために使用した解決策は、多くの場所でコードを変更することになります。

あなたはこのようにactionPerformed持つことができます。

private void processInputReceived(String actionCommand){ 
    if(Character.isDigit(actionCommand.toCharArray()[0])){ 
     digitsSelected(actionCommand); 
    } else { 
     operatorSelected(actionCommand.toCharArray()[0]); 
    } 
} 

private void operatorSelected(char selectedOperator){ 
    oper = selectedOperator; 
    display1 = display; 
    display = ""; 
    jtfResult.setText(""); 
} 

private void digitsSelected(String selectedValue){ 
    jtfResult.setText(display + selectedValue); 
    display = jtfResult.getText(); 
} 
関連する問題