问题
I am working on a simple calculator in JAVA as i'm trying to experiment with a GUI. I have run into some errors that still aren't resolved with the debugger..
The buttons on the calculator that represent *,- ans so forth aren't working properly, the only one working properly is the plus button which works properly.
The division button never outputs anything, it outputs an error that says that it cant be divided by zero. This is the strangest one because if the input or the number being saved is zero it would definitely effect the plus answer but it does not.
The multiply button outputs a zero as its answer ans the minus button adds the two numbers together instead of reducing one from the other..
If anyone has is seeing the reason of any of the above problems please tell me..
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//Version 1.0
public class App {
private JLabel txt;
private JPanel main;
private JButton one;
private JButton three;
private JButton nine;
private JButton seven;
private JButton eight;
private JButton two;
private JButton four;
private JButton six;
private JButton clear;
private JButton min;
private JButton div;
private JButton times;
private JButton zero;
private JButton five;
private JButton button1;
private JButton plus;
//Variables are declared
int num1;
int num2;
int ans;
boolean kms = false;
int input;
/* boolean multiplication = false;
boolean division = false;
boolean subtract = false;
boolean addition = false;*/
public App() {
txt.setText("0");
times.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
txt.setText("*");
input = 1;
kms = true;
}
});
div.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
txt.setText("/");
kms = true;
input = 2;
}
});
min.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
txt.setText("-");
kms = true;
input = 3;
}
});
plus.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
txt.setText("+");
kms = true;
input = 4;
}
});
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(txt + "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;
}
});
num2 = Integer.parseInt(txt.getText());
}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;
}
});
num2 = Integer.parseInt(txt.getText());
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
switch(input){
case 1:
ans = num1 * num2;
txt.setText("Answer is " + ans);
break;
case 2:
ans = num1 / num2;
txt.setText("Answer is " + ans);
break;
case 3:
ans = num1 - num2;
txt.setText("Answer is " + ans);
break;
case 4:
ans = num1 + num2;
txt.setText("Answer is " + ans);
break;
}
}
});
}
}
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();
}
}
回答1:
According to what you have done in the above code if you enter integers with only one digit it would work perfectly.
Ex: add 5 then
num1=5
and press+
button thenkms
istrue
, then enter 6 andnum2=6
now if you press theresult
the result will be 11.
But if you try to enter another digit before the result, This entered digit will be added to num2
like num2 = num2 + newAddedDigit
instead of concatenating to num2
so in order to get the real functionality of a calculator try to concatenate on number buttons pressed for num1
and num2
来源:https://stackoverflow.com/questions/50275620/java-calculator-errors