Калькулятор - Java (241453)
Формулировка задачи:
Помогите разобраться, почему после нажатия кнопки "=" не вычисляется результат выражения? Код выполняющий вычисление результата как то некорректно выполняет свою роботу, а почему не могу понять
Листинг программы
- 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;
- }
Решение задачи: «Калькулятор»
textual
Листинг программы
- 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));
- }
- });
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д