java калькулятор - помогите найти ошибку (сделал калькулятор, но не работает логика подсчета..)

Модератор: Модераторы разделов

Ironman33
Сообщения: 4

java калькулятор - помогите найти ошибку

Сообщение Ironman33 »

написал код под калькулятор, но почему то не работает логика подсчета, подскажите где ошибка?

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

public class untitled10 {

JFrame frame;
JTextField t;
int x;
JButton button[] = new JButton[15];
String key[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9","+","-","*","/","="};

public static void main (String [] args) {
untitled10 gui= new untitled10();
gui.go();
}

public void go() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
t=new JTextField(12);
frame.setSize(200,280);
frame.setResizable(false);
frame.setVisible(true);
frame.setLayout(new FlowLayout());
frame.add(t);



for (int i = 0; i<=15; i++){
button[i] = new JButton(key[i]);
frame.add(button[i]);
button[i].addActionListener(new BListener());
}

}

class BListener implements ActionListener {
int firstValue = 0;
String operation = "+";

public void actionPerformed (ActionEvent e) {



if (e.getSource()==button[1]) {
t.setText(null);
x=0;
t.setText(""+x);
}

if (e.getSource()==button[2]) {
t.setText(null);
x=1;
t.setText(""+x);
}

if (e.getSource()==button[3]) {
t.setText(null);
x=2;
t.setText(""+x);
}

if (e.getSource()==button[4]) {
t.setText(null);
x=3;
t.setText(""+x);
}

if (e.getSource()==button[5]) {
t.setText(null);
x=4;
t.setText(""+x);
}

if (e.getSource()==button[6]) {
t.setText(null);
x=5;
t.setText(""+x);
}


if (e.getSource()==button[7]) {
t.setText(null);
x=6;
t.setText(""+x);
}

if (e.getSource()==button[8]) {
t.setText(null);
x=7;
t.setText(""+x);
}

if (e.getSource()==button[9]) {
t.setText(null);
x=8;
t.setText(""+x);
}

if (e.getSource()==button[10]) {
t.setText(null);
x=9;
t.setText(""+x);
}


if (e.getSource()==button[11]) {
firstValue = Integer.valueOf(t.getText());
operation = "+";
}

if (e.getSource()==button[12]) {
firstValue = Integer.valueOf(t.getText());
operation = "-";
}

if (e.getSource()==button[13]) {
firstValue = Integer.valueOf(t.getText());
operation = "*";
}

if (e.getSource()==button[14]) {
firstValue = Integer.valueOf(t.getText());
operation = "/";
}

if (e.getSource()==button[15]) {
int secondValue = Integer.valueOf(t.getText());
if("+".equals(operation)){
t.setText((firstValue+secondValue)+"");
}
if("-".equals(operation)){
t.setText((firstValue-secondValue)+"");
}
if("*".equals(operation)){
t.setText((firstValue*secondValue)+"");
}
if("/".equals(operation)){
t.setText((firstValue/secondValue)+"");


}

}

}
}
}
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20977
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: java калькулятор - помогите найти ошибку

Сообщение Bizdelnick »

В логике ошибка в том, что Вы вместо всего значения берёте только последнюю цифру.
А глобальная ошибка - в том, что Вы всё преобразуете в текст и обратно. Ну и в том, что пишете китайский код, конечно.

P. S. Не спрашивайте меня, как написать это правильно. Я не знаю java.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ironman33
Сообщения: 4

Re: java калькулятор - помогите найти ошибку

Сообщение Ironman33 »

так мне не нужно всё значение, я хочу для начала увидеть результат работы при операции с простыми числами. А преобразование делаю, т.к. в ява все вводимые значения в поле текста изначально считаються стринговыми
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20977
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: java калькулятор - помогите найти ошибку

Сообщение Bizdelnick »

Ironman33 писал(а):
04.02.2015 15:16
преобразование делаю, т.к. в ява все вводимые значения в поле текста изначально считаються стринговыми

Храните их в числовом виде в отдельной переменной (можно сразу в firstValue или secondValue писать в зависимости от того, известна ли уже операция, хотя при дальнейшем усложнении программы это может начать мешать). И операцию в виде строки хранить - тоже не лучшая идея.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20977
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: java калькулятор - помогите найти ошибку

Сообщение Bizdelnick »

Да, ещё, сразу не заметил: в java индексация массивов начинается с нуля. Так что замените китайский кусок

Код: Выделить всё

if (e.getSource()==button[1]) {
t.setText(null);
x=0;
t.setText(""+x);
}
//...
if (e.getSource()==button[10]) {
t.setText(null);
x=9;
t.setText(""+x);
}

на

Код: Выделить всё

int btn;

btn = e.getSource();
if (btn < 10) {
    x = x * 10 + btn;
    t.setText(""+x);
}
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ironman33
Сообщения: 4

Re: java калькулятор - помогите найти ошибку

Сообщение Ironman33 »

спасибо, исправлю, но и ранее калькулятор выводит графическую оболочку, каждая кнопка цифры при нажатии высвечивается в поле текста, но основная проблема - при сложении/умножении/делении и т.д. не выводит результат
Вот я даже сделал упрощенную версию:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import javax.swing.JFrame;

public class untitled10 {

int x;
JFrame frame;
JButton b1;
JButton b2;
JButton b3;
JButton b4;
JButton b5;
JTextField t;

public static void main (String [] args) {
untitled10 gui= new untitled10();
gui.go();
}

public void go() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

b1 = new JButton("1");
b2 = new JButton("2");
b3 = new JButton("+");
b4 = new JButton("-");
b5 = new JButton("=");
t=new JTextField(12);

b1.addActionListener(new BListener());
b2.addActionListener(new BListener());
b3.addActionListener(new BListener());
b4.addActionListener(new BListener());
b5.addActionListener(new BListener());

frame.setSize(200,500);
frame.setResizable(false);
frame.setVisible(true);
frame.setLayout(new FlowLayout());
frame.add(t);
frame.add(b1);
frame.add(b2);
frame.add(b3);
frame.add(b4);
frame.add(b5);

}

class BListener implements ActionListener {
int firstValue = 0;
String operation = "+";

public void actionPerformed (ActionEvent e) {
if (e.getSource()==b1) {
t.setText(null);
x=1;
t.setText(""+x);
}
if (e.getSource()==b2) {
t.setText(null);
x=2;
t.setText(""+x);
}
if (e.getSource()==b3) {
firstValue = x;
operation = "+";
}
if (e.getSource()==b4) {
firstValue = x;
operation = "-";
}


if (e.getSource()==b5) {
int secondValue = Integer.valueOf(t.getText());
if("+".equals(operation)){
t.setText(""+(firstValue+secondValue));
}
if("-".equals(operation)){
t.setText(""+(firstValue-secondValue));
}
}

}
}
}

всё равно не считает...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20977
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: java калькулятор - помогите найти ошибку

Сообщение Bizdelnick »

Ironman33 писал(а):
04.02.2015 17:00
при сложении/умножении/делении и т.д. не выводит результат

Ну вот тут я уже не в курсе. Вы зачем-то делали при выводе цифр t.setText(null); - я не знаю, обязательно ли это, но перед выводом результата этого нет.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ironman33
Сообщения: 4

Re: java калькулятор - помогите найти ошибку

Сообщение Ironman33 »

t.setText(null); - очищает строчку от предыдущего значения, чтоб потом установить новое
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20977
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: java калькулятор - помогите найти ошибку

Сообщение Bizdelnick »

Ironman33 писал(а):
04.02.2015 17:07
t.setText(null); - очищает строчку от предыдущего значения, чтоб потом установить новое

Ну вот Вы её не очистили. Я не знаю, важно ли это, просто констатирую.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: