So I have a calculator app. built and it works correctly however if the user inputs for example 4+√ I get an error (shown below). I was told I need to find if the user has entered in an operation already when they hit the √ button and if they have then just don't do anything. I'm really new to Java though and I'm not sure how to do that.
Here is the action listener where all the calculations are done (I believe the code needs to go under where you see if (a.getSource() == textSqrt)):
public class event implements ActionListener {
public void actionPerformed(ActionEvent a) {
String text = a.getActionCommand();
if (text.equals("1")) {
result.setText(result.getText() + "1");
} else if (text.equals("2")) {
result.setText(result.getText() + "2");
} else if (text.equals("3")) {
result.setText(result.getText() + "3");
} else if (text.equals("4")) {
result.setText(result.getText() + "4");
} else if (text.equals("5")) {
result.setText(result.getText() + "5");
} else if (text.equals("6")) {
result.setText(result.getText() + "6");
} else if (text.equals("7")) {
result.setText(result.getText() + "7");
} else if (text.equals("8")) {
result.setText(result.getText() + "8");
} else if (text.equals("9")) {
result.setText(result.getText() + "9");
} else if (text.equals("0")) {
result.setText(result.getText() + "0");
} else if (result.getText().indexOf(".") < 1){
result.setText(result.getText() + ".");
}
String str = result.getText();
textBox = Double.parseDouble(str);
if (a.getSource()
== textAdd) {
op = 1;
firstInput = textBox;
result.setText("");
}
if (a.getSource()
== textSubtract) {
op = 2;
firstInput = textBox;
result.setText("");
}
if (a.getSource()
== textMultiply) {
op = 3;
firstInput = textBox;
result.setText("");
}
if (a.getSource()
== textDivide) {
op = 4;
firstInput = textBox;
result.setText("");
}
if (a.getSource()
== textPercent) {
op = 5;
firstInput = textBox;
result.setText("");
}
if (a.getSource() == textSqrt) {
op = 6;
firstInput = textBox;
answer = Math.sqrt(textBox);
str = Double.toString(answer);
result.setText(str);
}
if (a.getSource()
== textSign) {
double neg;
op = 7;
neg = 0 - textBox;
str = Double.toString(neg);
result.setText(str);
}
if (a.getSource()
== textEqual) {
if (op == 1) {
answer = firstInput + textBox;
str = Double.toString(answer);
result.setText(str);
} else if (op == 2) {
answer = firstInput - textBox;
str = Double.toString(answer);
result.setText(str);
} else if (op == 3) {
answer = firstInput * textBox;
str = Double.toString(answer);
result.setText(str);
} else if (op == 4) {
answer = firstInput / textBox;
str = Double.toString(answer);
result.setText(str);
} else if (op == 5) {
answer = firstInput % textBox;
str = Double.toString(answer);
result.setText(str);
}
}
}
}
and here is the error I get when I press an operation and the square root button
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "."
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)
at java.lang.Double.parseDouble(Double.java:540)
at inlab05.InLab05$event.actionPerformed(InLab05.java:215)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Sorry for such a long post. Hopefully someone can help me :)