GUI计算器返回0

时间:2013-11-24 03:29:39

标签: java

当我运行我的第一轮代码(mult。)时,它可以工作,但如果我再试一次,为第一个提示输入“answer”,它会给我0.为什么?

package gui.calc;

import javax.swing.JOptionPane;

public class GUICalc {
    public static double mult(double mult1, double mult2) {
        mult1 *= mult2;
        return mult1;
    }

    public static double div(double div1, double div2) {
        div1 /= div2;
        return div1;
    }

    public static double add(double add1, double add2) {
        add1 += add2;
        return add1;
    }

    public static double sub(double sub1, double sub2) {
        sub1 -= sub2;
        return sub1;
    }

    public static void main(String[] args) {
        Boolean goAgain = true;
        double finalAns = 1;
        while (goAgain == true) {

            Object[] options = { "*", "/", "+", "-" };
            int n = JOptionPane.showOptionDialog(null,
                    "Choose your                              operationr",
                    "this is null", JOptionPane.YES_NO_CANCEL_OPTION,
                    JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
            String s1 = JOptionPane.showInputDialog(null, "enter nums",
                    "Enter NUm", JOptionPane.ERROR_MESSAGE);
            String s2 = JOptionPane.showInputDialog(null, "enter nums",
                    "Enter NUm", JOptionPane.ERROR_MESSAGE);
            double d1 = 0;
            double d2 = 0;
            if (s1.equalsIgnoreCase("answer")) {
                d1 = finalAns;
            }

            else if (s2.equalsIgnoreCase("answer")) {
                d2 = finalAns;
            } else {
                d1 = Double.parseDouble(s1);
                d2 = Double.parseDouble(s2);
            }
            if (n == 0) {
                double mult1 = mult(d1, d2);
                JOptionPane.showConfirmDialog(null, mult1, "dsfa",
                        JOptionPane.ERROR_MESSAGE);
                finalAns = mult1;
            } else if (n == 1) {
                double div1 = div(d1, d2);
                JOptionPane.showConfirmDialog(null, div1, "dsfa",
                        JOptionPane.ERROR_MESSAGE);
                finalAns = div1;
            } else if (n == 2) {
                double plus1 = add(d1, d2);
                JOptionPane.showConfirmDialog(null, plus1, "dsfa",
                        JOptionPane.ERROR_MESSAGE);
                finalAns = plus1;
            } else if (n == 3) {
                double sub1 = sub(d1, d2);
                JOptionPane.showConfirmDialog(null, sub1, "dsfa",
                        JOptionPane.ERROR_MESSAGE);
                finalAns = sub1;
            }
            JOptionPane.showMessageDialog(null, finalAns, "hi",
                    JOptionPane.ERROR_MESSAGE);
            if (JOptionPane.showConfirmDialog(null, "GO AGAIN?", "daf",
                    JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) {
                goAgain = false;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

问题在于:

        double d1 = 0;
        double d2 = 0;
        if (s1.equalsIgnoreCase("answer")) {
            d1 = finalAns;
        }

        else if (s2.equalsIgnoreCase("answer")) {
            d2 = finalAns;
        } else {
            d1 = Double.parseDouble(s1);
            d2 = Double.parseDouble(s2);
        }

如果s1 回答,则会执行第一个if块。这将设置d1 = finalAns,但d2将只是0,因为它是初始化的内容,并且永远不会分配任何其他内容。这就是我认为你打算做的事情:

        double d1 = 0;
        double d2 = 0;
        if (s1.equalsIgnoreCase("answer")) {
            d1 = finalAns;
        } else {
            d1 = Double.parseDouble(s1);
        }

        if (s2.equalsIgnoreCase("answer")) {
            d2 = finalAns;
        } else {
            d2 = Double.parseDouble(s2);
        }