2014-01-05 8 views
1

Это мой первый пост здесь, и я надеюсь, что смогу получить помощь по школьному проекту, который у меня есть. Проект состоит в том, чтобы сделать калькулятор на Java, и я сделал его, и он работает нормально по большей части, только проблема, с которой я столкнулась, заключается в том, что когда я получаю ответ - скажем, 5+5=10 и 10 отображается, когда я хочу ввести другое number позволяет сказать, что я хочу войти в 8 * 10, и для этого я пишу в 8, вместо того, чтобы удалить предыдущий ответ, который равен 10, а вместо 8 - вместо 8, он будет писать 8 после 10, так что это будет 108 . Я хочу, чтобы предыдущий ответ удалялся после ввода нового номера после ответа. Надеюсь, я объяснил это хорошо, вот мой код, и я хотел бы немного помочь в этом вопросе, поскольку все, что я пробовал, не сработало. Заранее спасибо.Помощь Java Calculator

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

public class Calculator_UI implements ActionListener { 

    JFrame frame = new JFrame("Calculator"); 
    JPanel panel = new JPanel(); 
    JTextArea text = new JTextArea(1, 20); 
    JButton but1 = new JButton("1"); 
    JButton but2 = new JButton("2"); 
    JButton but3 = new JButton("3"); 
    JButton but4 = new JButton("4"); 
    JButton but5 = new JButton("5"); 
    JButton but6 = new JButton("6"); 
    JButton but7 = new JButton("7"); 
    JButton but8 = new JButton("8"); 
    JButton but9 = new JButton("9"); 
    JButton but0 = new JButton("0"); 
    JButton butadd = new JButton("+"); 
    JButton butsub = new JButton("-"); 
    JButton butmulti = new JButton("*"); 
    JButton butdiv = new JButton("/"); 
    JButton buteq = new JButton("="); 
    JButton butclear = new JButton("C"); 
    Double number1, number2, result; 
    int addc = 0, subc = 0, multic = 0, divc = 0; 

    public void ui() { 
     frame.setVisible(true); 
     frame.setSize(230, 200); 
     frame.setResizable(false); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.add(panel); 

     panel.add(text); 
     panel.add(but1); 
     panel.add(but2); 
     panel.add(but3); 
     panel.add(but4); 
     panel.add(but5); 
     panel.add(but6); 
     panel.add(but7); 
     panel.add(but8); 
     panel.add(but9); 
     panel.add(but0); 

     panel.add(butadd); 
     panel.add(butsub); 
     panel.add(butmulti); 
     panel.add(butdiv); 
     panel.add(buteq); 
     panel.add(butclear); 

     but1.addActionListener(this); 
     but1.setBackground(Color.cyan); 
     but2.addActionListener(this); 
     but2.setBackground(Color.cyan); 
     but3.addActionListener(this); 
     but3.setBackground(Color.cyan); 
     but4.addActionListener(this); 
     but4.setBackground(Color.cyan); 
     but5.addActionListener(this); 
     but5.setBackground(Color.cyan); 
     but6.addActionListener(this); 
     but6.setBackground(Color.cyan); 
     but7.addActionListener(this); 
     but7.setBackground(Color.cyan); 
     but8.addActionListener(this); 
     but8.setBackground(Color.cyan); 
     but9.addActionListener(this); 
     but9.setBackground(Color.cyan); 
     but0.addActionListener(this); 
     but0.setBackground(Color.cyan); 

     butadd.addActionListener(this); 
     butadd.setBackground(Color.cyan); 
     butsub.addActionListener(this); 
     butsub.setBackground(Color.cyan); 
     butmulti.addActionListener(this); 
     butmulti.setBackground(Color.cyan); 
     butdiv.addActionListener(this); 
     butdiv.setBackground(Color.cyan); 
     buteq.addActionListener(this); 
     buteq.setBackground(Color.cyan); 
     butclear.addActionListener(this); 
     butclear.setBackground(Color.cyan); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 

     Object source = e.getSource(); 

     if (source == butclear) { 
      number1 = 0.0; 
      number2 = 0.0; 
      text.setText(""); 
     } 

     if (source == but1) { 
      text.append("1"); 
     } 
     if (source == but2) { 
      text.append("2"); 
     } 
     if (source == but3) { 
      text.append("3"); 
     } 
     if (source == but4) { 
      text.append("4"); 
     } 
     if (source == but5) { 
      text.append("5"); 
     } 
     if (source == but6) { 
      text.append("6"); 
     } 
     if (source == but7) { 
      text.append("7"); 
     } 
     if (source == but8) { 
      text.append("8"); 
     } 
     if (source == but9) { 
      text.append("9"); 
     } 
     if (source == but0) { 
      text.append("0"); 
     } 
     if (source == butadd) { 
      number1 = number_reader(); 
      text.setText(""); 
      addc = 1; 
      subc = 0; 
      multic = 0; 
      divc = 0; 
     } 
     if (source == butsub) { 
      number1 = number_reader(); 
      text.setText(""); 
      addc = 0; 
      subc = 1; 
      multic = 0; 
      divc = 0; 
     } 
     if (source == butmulti) { 
      number1 = number_reader(); 
      text.setText(""); 
      addc = 0; 
      subc = 0; 
      multic = 1; 
      divc = 0; 
     } 
     if (source == butdiv) { 
      number1 = number_reader(); 
      text.setText(""); 
      addc = 0; 
      subc = 0; 
      multic = 0; 
      divc = 1; 
     } 

     if (source == buteq) { 
      number2 = number_reader(); 
      if (addc == 1) { 
       result = number1 + number2; 
       text.setText(Double.toString(result)); 
      } 
      if (subc == 1) { 
       result = number1 - number2; 
       text.setText(Double.toString(result)); 

      } 
      if (multic == 1) { 
       result = number1 * number2; 
       text.setText(Double.toString(result)); 

      } 
      if (divc == 1) { 
       result = number1/number2; 
       text.setText(Double.toString(result)); 
      } 
     } 
    } 

    public double number_reader() { 
     Double num1; 
     String s; 
     s = text.getText(); 
     num1 = Double.valueOf(s); 

     return num1; 
    } 
} 
+0

не должен размещаться здесь для домашней работы. вы пытались использовать надежный Google? –

+2

Ofc У меня есть, я знаю его домашнюю работу, но после того, как я спросил своих одноклассников и не нашел ответа на Google, это мое последнее средство, мне не нравится «обманывать». Но моя программа работает в любом случае, ее просто не на 100% отлично, я вероятно, будет оценен 10/10, но я хочу знать, как я могу исправить эту проблему, чтобы я мог чему-то научиться. – Rockeer

ответ

4

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

На самом деле вы должны даже трансформировать всю логику в state diagram, потому что если, например, пользователь нажимает + дважды, вы, вероятно, следует отображать сообщение об ошибке или игнорировать второй +, вместо чтения текущего номера. Каждое состояние должно определять, что происходит, когда нажата любая кнопка, и какое следующее состояние зависит от того, какая кнопка нажата.

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

+0

Огромное спасибо, я даже не сильно редактировал =, я постоянно пытался редактировать кнопки по какой-то нечетной причине, спасибо, что указал мне в правильном направлении :) – Rockeer