написал код под калькулятор, но почему то не работает логика подсчета, подскажите где ошибка?
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)+"");
}
}
}
}
}
java калькулятор - помогите найти ошибку (сделал калькулятор, но не работает логика подсчета..)
Модератор: Модераторы разделов
-
- Модератор
- Сообщения: 20977
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: java калькулятор - помогите найти ошибку
В логике ошибка в том, что Вы вместо всего значения берёте только последнюю цифру.
А глобальная ошибка - в том, что Вы всё преобразуете в текст и обратно. Ну и в том, что пишете китайский код, конечно.
P. S. Не спрашивайте меня, как написать это правильно. Я не знаю java.
А глобальная ошибка - в том, что Вы всё преобразуете в текст и обратно. Ну и в том, что пишете китайский код, конечно.
P. S. Не спрашивайте меня, как написать это правильно. Я не знаю java.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 4
Re: java калькулятор - помогите найти ошибку
так мне не нужно всё значение, я хочу для начала увидеть результат работы при операции с простыми числами. А преобразование делаю, т.к. в ява все вводимые значения в поле текста изначально считаються стринговыми
-
- Модератор
- Сообщения: 20977
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: java калькулятор - помогите найти ошибку
Храните их в числовом виде в отдельной переменной (можно сразу в firstValue или secondValue писать в зависимости от того, известна ли уже операция, хотя при дальнейшем усложнении программы это может начать мешать). И операцию в виде строки хранить - тоже не лучшая идея.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Модератор
- Сообщения: 20977
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: java калькулятор - помогите найти ошибку
Да, ещё, сразу не заметил: в 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);
}
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 4
Re: java калькулятор - помогите найти ошибку
спасибо, исправлю, но и ранее калькулятор выводит графическую оболочку, каждая кнопка цифры при нажатии высвечивается в поле текста, но основная проблема - при сложении/умножении/делении и т.д. не выводит результат
Вот я даже сделал упрощенную версию:
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));
}
}
}
}
}
всё равно не считает...
Вот я даже сделал упрощенную версию:
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));
}
}
}
}
}
всё равно не считает...
-
- Модератор
- Сообщения: 20977
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: java калькулятор - помогите найти ошибку
Ну вот тут я уже не в курсе. Вы зачем-то делали при выводе цифр t.setText(null); - я не знаю, обязательно ли это, но перед выводом результата этого нет.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 4
Re: java калькулятор - помогите найти ошибку
t.setText(null); - очищает строчку от предыдущего значения, чтоб потом установить новое
-
- Модератор
- Сообщения: 20977
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: java калькулятор - помогите найти ошибку
Ну вот Вы её не очистили. Я не знаю, важно ли это, просто констатирую.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |