Java-构建计算器应用程序,当我按下一个操作时出错,然后√;

Java-构建计算器应用程序,当我按下一个操作时出错,然后√;,java,calculator,operation,Java,Calculator,Operation,所以我有一个计算器应用程序。但是,如果用户输入例如4+√ 我得到一个错误(如下所示)。有人告诉我,当用户点击按钮时,我需要查找用户是否已经输入了操作√ 按钮,如果他们有,那就什么也不要做。不过,我对Java真的是个新手,我不知道该怎么做 这是一个动作监听器,所有的计算都是在这里完成的(我相信代码需要放在下面,看看是否(a.getSource()==textSqrt)): 抱歉发这么长的帖子。希望有人能帮我:) 根据解析器,单个句点不是有效数字 弄清楚为什么输入会进入格式化程序,这显然是意外的 使

所以我有一个计算器应用程序。但是,如果用户输入例如4+√ 我得到一个错误(如下所示)。有人告诉我,当用户点击按钮时,我需要查找用户是否已经输入了操作√ 按钮,如果他们有,那就什么也不要做。不过,我对Java真的是个新手,我不知道该怎么做

这是一个动作监听器,所有的计算都是在这里完成的(我相信代码需要放在下面,看看是否(a.getSource()==textSqrt)):

抱歉发这么长的帖子。希望有人能帮我:)

根据解析器,单个句点不是有效数字

弄清楚为什么输入会进入格式化程序,这显然是意外的


使用
==
比较字符串是常见的错误。请改用
equals()
方法。(确保您理解原因-在SO中搜索问题)。

检查是否存在“.”by
indexOf(')。<1
是错误的


如果
根本不存在,它将返回
-1
,但如果它存在于第一个字符中,它将返回
0
,这两个字符都是<1,但意味着完全不同的东西。

这部分是否有一个off by one错误:“result.getText().indexOf(“.”<1”例如,如果输入以“.”开头会怎样?indexOf将返回“0”,但仍存在于字符串中。您可能需要result.getText()包含(“.”>if(text.equals(“1”){result.setText(result.getText()+“1”);}else if(text.equals(“2”){result.setText(result.getText()+“2”);}else if(text.equals(“3”))我的眼睛。。。让我看不见it@drobert该代码的目的是使用户不能输入超过一个小数点。我还想做吗。包含(“.”?@SargeBorsch是的,我知道这不是它应该做的,但这就是我们现在学习它的方式。我应该使用switch语句吗?您应该从更简单的问题开始解决。并始终消除代码重复@MarkShimala他没有使用
==
来比较字符串,它是用来比较源代码的,因为
a
ActionEvent
的引用:)你看到他在哪里使用
==
来比较
字符串的内容?@Azad这行代码的目的是让用户不能输入超过一个小数点。有什么更好的方法可以做到这一点?如何防止用户输入超过一个小数点?看起来它会读取值,如果它在前两个字符中包含小数点或不包含小数点,则会在末尾添加一个小数点。那不可能是你想要的。
    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);
            }

        }
    }
}
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)
java.lang.NumberFormatException: For input string: "."