2011-12-04 3 views
2

Имея немного проблем с моей программой, они отображают неправильные результаты, и когда вы пытаетесь выполнить вычисления для одной цифры, вы получите сообщение об ошибке. Программа, размещенная ниже, любая помощь приветствуется.Java Calculator Отображение неверных результатов

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

* "вы получите сообщение об ошибке." * Какую ошибку? Всегда копируйте/вставляйте ошибку, а не заставляйте нас угадывать. В стороне, не забудьте задать вопрос. –

+0

Поместите в свой код больше println, особенно перед расположением ошибок. Затем логически пройдите логически, как если бы вы были компьютером. Затем вы увидите, что вы не меняете отображение (и по расширению display1), как вы думаете, что делаете. –

ответ

1

Вам нужно получить текущее значение из jtfResult.

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

Ваш вопрос здесь

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

изменить его

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

Кроме того, когда любой оператор щелкнул вы должны очистить строку дисплея.

На боковой ноте вы должны стараться избегать написания дублирующего блока кода, которое когда-либо использовалось для исправления вашей проблемы, вы будете менять код так много мест.

Вы можете иметь ваш actionPerformed так:

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 как

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(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^