Ошибки калькулятора Java - PullRequest
0 голосов
/ 10 мая 2018

Я работаю над простым калькулятором в JAVA и пытаюсь поэкспериментировать с графическим интерфейсом. Я столкнулся с некоторыми ошибками, которые до сих пор не устранены с помощью отладчика.

Кнопки на калькуляторе, которые представляют *, - и т. Д., Не работают должным образом, работает только одна кнопка плюс, которая работает правильно.

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

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

Если кто-то видит причину любой из вышеперечисленных проблем, пожалуйста, сообщите мне ..

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

  //Version 1.0

 public class App {
  private JLabel txt;
  private JPanel main;
  private JButton one;
  private JButton three;
  private JButton nine;
  private JButton seven;
  private JButton eight;
  private JButton two;
  private JButton four;
  private JButton six;
  private JButton clear;
  private JButton min;
  private JButton div;
  private JButton times;
  private JButton zero;
  private JButton five;
  private JButton button1;
  private JButton plus;

//Variables are declared
int num1;
int num2;
int ans;

boolean kms = false;

int input;
/* boolean multiplication = false;
boolean division = false;
boolean subtract = false;
boolean addition = false;*/

public App() {

    txt.setText("0");


    times.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            txt.setText("*");
            input = 1;
            kms = true;
        }
    });

    div.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            txt.setText("/");
            kms = true;
            input = 2;
        }
    });

    min.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            txt.setText("-");
            kms = true;
            input = 3;
        }
    });

    plus.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            txt.setText("+");
            kms = true;
            input = 4;
        }
    });

    clear.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            ans = 0;
            num1 = 0;
            num2 = 0;
            txt.setText("");
        }
    });

    if(kms == true){

        //Second number being inputted
        num1 = Integer.parseInt(txt.getText());
        txt.setText("");

        one.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText(txt + "1");
                num2 = num2 + 1;

            }
        });
        two.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("2");
                num2 = num2 + 2;
            }
        });
        three.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("3");
                num2 = num2 + 3;
            }
        });
        four.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("4");
                num2 = num2 + 4;
            }
        });
        five.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("5");
                num2 = num2 + 5;
            }
        });
        six.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("6");
                num2 = num2 + 6;
            }
        });
        seven.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("7");
                num2 = num2 + 7;
            }
        });
        eight.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("8");
                num2 = num2 + 8;
            }
        });
        nine.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("9");
                num2 = num2 + 9;
            }
        });
        zero.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("0");
                num2 = num2 + 0;
            }
        });

        num2 = Integer.parseInt(txt.getText());

    }else if(kms == false){
        //First number being inputted
        one.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("1");
                num1 = num1 + 1;
            }
        });
        two.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("2");
                num1 = num1 + 2;
            }
        });
        three.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("3");
                num1 = num1 + 3;
            }
        });
        four.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("4");
                num1 = num1 + 4;
            }
        });
        five.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("5");
                num1 = num1 + 5;
            }
        });
        six.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("6");
                num1 = num1 + 6;
            }
        });
        seven.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("7");
                num1 = num1 + 7;
            }
        });
        eight.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("8");
                num1 = num1 + 8;
            }
        });
        nine.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("9");
                num1 = num1 + 9;
            }
        });
        zero.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                txt.setText("0");
                num1 = num1 + 0;
            }
        });

        num2 = Integer.parseInt(txt.getText());

        button1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                switch(input){
                    case 1:
                        ans = num1 * num2;
                        txt.setText("Answer is " + ans);
                    break;
                    case 2:
                        ans = num1 / num2;
                        txt.setText("Answer is " + ans);
                    break;
                    case 3:
                        ans = num1 - num2;
                        txt.setText("Answer is " + ans);
                    break;
                    case 4:
                        ans = num1 + num2;
                        txt.setText("Answer is " + ans);
                    break;
                }
            }
        });


    }
}




public static void main(String[] args) {

    JFrame frame = new JFrame("Calculator");
    frame.setBackground(Color.white);
    frame.setVisible(true);
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(new App().main);
    frame.pack();
}

}

1 Ответ

0 голосов
/ 10 мая 2018

В соответствии с тем, что вы сделали в приведенном выше коде, если вы введете целые числа только с одной цифрой, это будет отлично работать.

Пример: добавьте 5, затем num1=5 и нажмите кнопку +, затем kms будет true, затем введите 6 и num2=6 сейчас, если вы нажмете result результат будет 11.

Но если вы попытаетесь ввести другую цифру перед результатом, эта введенная цифра будет добавлена ​​к num2, как num2 = num2 + newAddedDigit вместо конкатенации к num2

поэтому, чтобы получить реальную функциональность калькулятора, попробуйте объединить числовые кнопки, нажимаемые для num1 и num2

...