Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 08.02.2014
Сообщений: 47

Калькулятор

02.11.2015, 17:03. Показов 1085. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите разобраться, почему после нажатия кнопки "=" не вычисляется результат выражения? Код выполняющий вычисление результата как то некорректно выполняет свою роботу, а почему не могу понять

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
/**
 * Created by blizardinka on 02.11.15.
 */
public class Calculator {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                CalculatorFrame frame = new CalculatorFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}
 
/**
 * Фрейм с панелью калькулятора()
 */
class CalculatorFrame extends JFrame {
    public CalculatorFrame() {
        setTitle("Calculator");
        CalculatorPanel panel = new CalculatorPanel();
        add(panel);
        pack();
    }
}
 
/**
 * Панель с кнопками калькулятора и элементом
 * для отображение результатов вычислений
 */
class CalculatorPanel extends JPanel {
    public CalculatorPanel() {
        setLayout(new BorderLayout());
 
        result = 0;
        lastCommand = "=";
        start = true;
 
        //Добавление элемента для отображения результата
 
        display = new JButton("0");
        display.setEnabled(false);
        add(display, BorderLayout.NORTH);
 
        ActionListener insert = new InsertAction();
        ActionListener command = new CommandAction();
 
        //Размещение кнопок в виде сетки 4х4
 
        panel = new JPanel();
        panel.setLayout(new GridLayout(4, 4));
 
        addButton("7", insert);
        addButton("8", insert);
        addButton("9", insert);
        addButton("/", command);
 
        addButton("4", insert);
        addButton("5", insert);
        addButton("6", insert);
        addButton("*", command);
 
        addButton("1", insert);
        addButton("2", insert);
        addButton("3", insert);
        addButton("-", command);
 
        addButton("0", insert);
        addButton("+", insert);
        addButton("=", insert);
        addButton(".", command);
 
        add(panel, BorderLayout.CENTER);
    }
 
    /**
     *Добавление к центральной панели
     * @param label  Надпись на кнопке
     * @param listener Слушатель кнопки
     */
    private void addButton(String label, ActionListener listener) {
        JButton button = new JButton(label);
        button.addActionListener(listener);
        panel.add(button);
    }
 
    /**
     * При обработки события строка, связаная с кнопкой,
     * помещается в конец отображаемого текста
     */
    private class InsertAction implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            String input = event.getActionCommand();
            if (start) {
                display.setText("");
                start = false;
            }
            display.setText(display.getText() + input);
        }
    }
 
    /**
     * При обработке события выполняется команда, которая
     * определяется строкой, связанной с кнопкой
     */
    private class CommandAction implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            String command = event.getActionCommand();
 
            if (start) {
                if (command.equals("-")) {
                    display.setText(command);
                    start = false;
                }
                else lastCommand = command;
            } else {
                calculate(Double.parseDouble(display.getText()));
                lastCommand = command;
                start = true;
            }
        }
    }
 
    /**
     * Выполнение вычислений
     * @param x Значение, накапливающее предыдущие результаты
     */
    public void calculate(double x) {
        if (lastCommand.equals("+")) result += x;
        else if (lastCommand.equals("-")) result -= x;
        else if (lastCommand.equals("*")) result *= x;
        else if (lastCommand.equals("/")) result /= x;
        else if (lastCommand.equals("=")) result = x;
        display.setText("" + result);
    }
 
    private JButton display;
    private JPanel panel;
    private double result;
    private String lastCommand;
    private boolean start;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.11.2015, 17:03
Ответы с готовыми решениями:

Калькулятор
доброе времени суток! прошу помочь отредактировать калькулятор на intellij idea 11.1.1 все правильно работает и получается вот так ...

Калькулятор
Как сделать программно расчёт что бы потом отображалось так package project1; import java.awt.Dimension; import...

Калькулятор
Помогите пожалуйста сделать функции floor, x^y, 1/x. Сделал, что мог, но не считает. Надеюсь на Вашу помощь. import java.awt.*; import...

3
 Аватар для Alradalion
132 / 126 / 85
Регистрация: 13.09.2013
Сообщений: 485
03.11.2015, 01:23
Имхо, вместо
Java
1
 addButton("=", insert);
Java
1
addButton("=", command);
0
237 / 236 / 72
Регистрация: 02.07.2013
Сообщений: 881
03.11.2015, 06:36
и вместо
Цитата Сообщение от blizardinka Посмотреть сообщение
addButton(".", command);
Java
1
addButton(".", insert);
0
0 / 0 / 1
Регистрация: 08.02.2014
Сообщений: 47
03.11.2015, 23:31  [ТС]
Я добавил код, в конструктор класса CalculatorPanel
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public CalculatorPanel() {
        setLayout(new BorderLayout());
 
        result = 0;
        lastCommand = "=";
        start = true;
 
        //Добавление элемента для отображения результата
 
        display = new JButton("0");
        display.setEnabled(false);
        add(display, BorderLayout.NORTH);
 
        ActionListener insert = new InsertAction();
        ActionListener command = new CommandAction();
 
        //Размещение кнопок в виде сетки 4х4
 
        panel = new JPanel();
        panel.setLayout(new GridLayout(4, 5));
 
        addButton("7", insert);
        addButton("8", insert);
        addButton("9", insert);
        addButton("/", command);
 
        addButton("4", insert);
        addButton("5", insert);
        addButton("6", insert);
        addButton("*", command);
 
        addButton("1", insert);
        addButton("2", insert);
        addButton("3", insert);
        addButton("-", command);
 
        addButton("0", insert);
        addButton(".", insert);
        addButton("=", command);
        addButton("+", command);
 
        add(panel, BorderLayout.CENTER);
        JButton buttonBack = new JButton("C");//кнопка С
        panel.add(buttonBack);
        buttonBack.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String temp = display.getText();
                display.setText(temp.substring(0,temp.length()-1));
            }
        });
    }
Есть возможность оптимизировать код и реализовать кнопку "C" по другому?

Добавлено через 33 минуты
А еще непонятно почему при выполнении операции вычитания происходит следуйщее 100 - 30 = 70, а вот 70 - 2 = -2
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.11.2015, 23:31
Помогаю со студенческими работами здесь

Калькулятор
Почему не работает if ? import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Reader extends JFrame{ ...

Калькулятор
Всем привет! Я делаю калькулятор в NetBeans IDE 1.8 по видеоуроку ndIIRMoyPPM Делаю все как в видеоуроке, но строчки...

Калькулятор
Делаю свой первый калькулятор. Получилась такая проблема: 1.При сложении все впорядке 2.При вычетании происходит сложение 3.При...

Калькулятор
вобщемя щас сижу на паре и мне нада написать в яве колькулятор, кто нить помогите мне добавить кнопку А в 4 степени и кнопку процент от...

Калькулятор
Подскажите, пожалуйста, что нужно добавить в код (и куда), чтобы при развертывание в полное окно кнопки не разбигались, а оставались в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru