计算器与链表java

时间:2017-12-14 21:36:07

标签: java linked-list calculator infinite-loop

嘿,我正在研究计算器,我在这里遇到一些问题 我试图使我的计算器能够像(9 * 5)+ 4/8 /(9-5)这样的操作作为示例 我有一些问题 我认为通过在链接列表中存储每个值和运算符然后尝试分析expretion是解决该问题的好方法但我不知道究竟是什么问题我认为我的代码中有一个infiniteloop 那就是代码。 T0和t都是TextFields 相同的代码用于*和+和/

op ap = new op("+");
    ap.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            cal.addLast(T0.getText());
            cal.addLast("+");
            oop = '+';
            t.setText(t.getText() + oop);
            T0.setText("");

        }
    });
    ap.setBounds(256, 390, 80, 56);
    getContentPane().add(ap);

那个=按钮

op ae = new op("=");
    ae.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            cal.addLast(T0.getText());
            T0.setText("");
            do {
                searchpar();
            } while (cal.size() != 1);
            T0.setText((cal.get(0)));

        }
    });
    ae.setBounds(256, 445, 80, 52);
    getContentPane().add(ae);

    public void searchpar() {
    int i = 0;
    do {
        do {
            if (cal.get(i) == "(") {
                paroind = i;
                paro = true;
            }
            i++;
            if (i == cal.size())
                break;

        } while (cal.get(i) != ")");
        if (i == 0) {
            searchmuldiv(0);
            searchaddmin(0);
        }

        else {
            parfind = i;
            paro = false;
        }

        if (paro == true) {
            searchmuldiv(paroind);
            searchaddmin(paroind);
        }
    } while (i != cal.size() && cal.size() != 1);
}

public void searchmuldiv(int i) {
    do {
        while (cal.get(i) != "×" && cal.get(i) != "÷") {
            i++;
            if (i == cal.size()) {
                i--;
                break;
            }
        }
        if (cal.get(i) == "×") {

            cal.set(i - 1,
                    String.format("%2.f", Double.parseDouble(cal.get(i - 1)) * Double.parseDouble(cal.get(i + 1))));
            cal.remove(i);
            cal.remove(i + 1);
            i--;
        } else if (cal.get(i) == "÷") {
            cal.set(i - 1,
                    String.format("%2.f", Double.parseDouble(cal.get(i - 1)) / Double.parseDouble(cal.get(i + 1))));
            cal.remove(i);
            cal.remove(i + 1);
            i--;

        }

    } while (i != 1 || i != (cal.size() - 1));
}

public void searchaddmin(int i) {

    do {
        while (cal.get(i) != "+" && cal.get(i) != "-") {
            i++;
            if (i == cal.size()) {
                i--;
                break;
            }
        }

        if (cal.get(i) == "+") {

            cal.set(i - 1,
                    String.format("%2.f", Double.parseDouble(cal.get(i - 1)) + Double.parseDouble(cal.get(i + 1))));
            cal.remove(i);
            cal.remove(i + 1);
            i--;
        } else if (cal.get(i) == "-") {
            cal.set(i - 1,
                    String.format("%2.f", Double.parseDouble(cal.get(i - 1)) - Double.parseDouble(cal.get(i + 1))));
            cal.remove(i);
            cal.remove(i + 1);
            i--;

        }

    } while (i != 0 || i != (cal.size() - 1));

}

我知道代码不会用()计算表达式,但是我很容易尝试修复它但它甚至计算出一个简单的表达式为1 + 1 并且只是在我的情况下使用哪个更好的问题string.format或string.valueOf 如果有更好的方法来做那个计算器而不是链接列表那么告诉我(我用java新手)

0 个答案:

没有答案