Логические ошибки калькулятора

Я работаю над простым калькулятором с Java, и я столкнулся с некоторыми ошибками.

В моем коде я написал так, что при нажатии кнопки умножения она умножает первые два введенных числа, но при нажатии кнопки ничего не происходит.

Также по какой-то причине при нажатии кнопки вычитания добавляется второе введенное число.

Почему-то отладчик тоже не помогает.

Кто-нибудь видит что-то, чего я не вижу?

int num1;
int num2;
int ans;

boolean kms = false;
boolean multiplication = false;
boolean division = false;
boolean subtract = false;
boolean addition = false;

public App() {

    times.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            txt.setText("X");
            kms = true;
            multiplication = true;

        }
    });
    div.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            txt.setText("/");
            kms = true;
            division = true;
        }
    });
    min.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            txt.setText("-");
            kms = true;
            subtract = true;
        }
    });
    plus.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            txt.setText("+");
            kms = true;
            addition = true;
        }
    });

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

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


        button1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (multiplication == true){
                    ans = num1 * num2;
                    txt.setText("Your answer is " + ans);
                    ans = 0;
                    num1 = 0;
                    num2 = 0;
                }else if (division == true){
                    ans = num1 / num2;
                    txt.setText("Your answer is " + ans);
                    ans = 0;
                    num1 = 0;
                    num2 = 0;
                }else if (subtract == true){
                    ans = num1 - num2;
                    txt.setText("Your answer is " + ans);
                    ans = 0;
                    num1 = 0;
                    num2 = 0;
                }else if (addition == true){
                    ans = num1 + num2;
                    txt.setText("Your answer is " + ans);
                    ans = 0;
                    num1 = 0;
                    num2 = 0;
                }
            }
        });

    }
}



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

Сейчас хорошее время, чтобы научиться пользоваться отладчиком. Действительно

OldProgrammer 07.05.2018 21:53

Думаешь, я не пробовал?

Swize 07.05.2018 22:03

@Swize, похоже, вы дважды задавали один и тот же вопрос. Я обращусь к проблеме ниже, чтобы помочь другим, кто будет ссылаться на этот пост в будущем.

Tharusha 11.05.2018 05:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
3
63
1

Ответы 1

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

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

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

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

та же проблема была решена также здесь. Надеюсь, это как-то поможет.

ура, счастливого кодирования

Другие вопросы по теме