重言式计划 - 不确定如何解决问题 - 有人可以帮忙吗?

时间:2015-10-24 17:04:24

标签: java data-structures computer-science

我一直在用java编写一个用户输入表达式的程序,程序说明它是否是重言式。我相信该计划完成了95%,但我遇到了问题。

我一直在接受这个问题:

java.lang.NullPointerException

    at list.ontop(list.java:29)

    at list.postfix(list.java:72)

    at ttester.main(ttester.java:16)

我没有运气调试它。 能否请您查看我的代码&帮我找到/修复错误?  我已经接近完成了。 顺便说一句,我不得不从课程列表中修剪一些代码 - 它太长了。

课程项目:

public class item {
        private Object datum;
        private item child;

        public item() {
            this(0, null);
        }

        public item(Object d) {
            datum = d;
        }

        public item(Object d, item n) {
            datum = d;
            child = n;
        }

        public void setDatum(Object d) {
            datum = d;
        }

        public void setChild(item n) {
            child = n;
        }

        public Object getDatum() {
            return this.datum;
        }

        public item getChild() {
            return this.child;
        }

        public void displayNode() {
            System.out.print(datum);
        }
    }

班级名单:

class list {
    private item top;
    private item lastTop;
    String output;

    public list() {
        top = null;
        lastTop = null;
    }

    public void push(Object a) {
        item temp = new item(a);
        lastTop = top;
        temp.setChild(top);
        top = temp;
    }

    public Object pop() {
        Object a = top.getDatum();
        top = top.getChild();
        return a;
    }

    public boolean empty() {
        return (top == null);
    }

    public Object ontop() {
        Object a = top.getDatum();

        return a;
    }

    public Object previousTop() {
        Object a = lastTop.getDatum();

        return a;
    }

    public int Priority(Object item) {
        if (item.equals(">"))
            return 1;
        if (item.equals("<"))
            return 2;
        if (item.equals("&"))
            return 4;
        if (item.equals("V"))
            return 3;
        if (item.equals("~"))
            return 5;
        if (item.equals("("))
            return 0;

        return 7;
    }

    public void postfix(String item) {
        list testList = new list();
        output = "";

        for (int i = 0; i < item.length(); i++) {
            char ch = item.charAt(i);
            if (ch == ('V') || ch == ('&') || ch == ('~') || ch == ('#')
                    || ch == ('>') || ch == ('<')) {
                while (!testList.empty()
                        && Priority(testList.ontop()) >= Priority(ch))
                    output += testList.pop();
                testList.push(ch);
            } else if (ch == '(') {
                testList.push(ch);
            } else if (ch == ')') {
                while (!testList.ontop().equals('('))
                    output += testList.pop();
                testList.pop();
            } else
                output += ch;
        }
        while (!testList.empty()) {
            output += testList.pop();
        }
        System.out.println("Postfix Form = " + output);
    }

    public void Evaluate(String g) {
        list testList = new list();
        String v1 = "", v2 = "", v3 = "", v4 = "", v5 = "", v6 = "", v7 = "", v8 = "", v9 = "";
        String m = "";
        String l = "";

        for (int i = 0; i < g.length(); i++) {
            char ch = g.charAt(i);
            char z = 't';
            char y = 'f';
            if (ch == 'P' || ch == 'Q' || ch == 'R') {
                testList.push(z);
                m += z;
            } else if (ch == '>') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            } else if (ch == '<') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            } else if (ch == '&') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                }
                m += ch;
            } else if (ch == 'V') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                }
                m += ch;
            } else if (ch == '~') {
                if (testList.ontop().equals("t")) {
                    testList.pop();
                    testList.push(y);
                } else {
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            }

        }
        if (testList.pop().equals("t"))
            v1 = "true";
        else
            v1 = "false";

        for (int i = 0; i < g.length(); i++) {
            char ch = g.charAt(i);
            char z = 't';
            char y = 'f';

            if (ch == 'P' || ch == 'Q') {
                testList.push(z);
                m += z;
            } else if (ch == 'R') {
                testList.push(y);
                m += z;
            } else if (ch == '>') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            } else if (ch == '<') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            } else if (ch == '&') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                }
                m += ch;
            } else if (ch == 'V') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                }
                m += ch;
            } else if (ch == '~') {
                if (testList.ontop().equals("t")) {
                    testList.pop();
                    testList.push(y);
                } else {
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            }
        }
        if (testList.pop().equals("t"))
            v2 = "true";
        else
            v2 = "false";

        for (int i = 0; i < g.length(); i++) {
            char ch = g.charAt(i);
            char z = 't';
            char y = 'f';
            if (ch == 'P' || ch == 'R') {
                testList.push(z);
                m += z;
            } else if (ch == 'Q') {
                testList.push(y);
                m += z;
            } else if (ch == '>') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            } else if (ch == '<') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            } else if (ch == '&') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                }
                m += ch;
            } else if (ch == 'V') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                }
                m += ch;
            } else if (ch == '~') {
                if (testList.ontop().equals("t")) {
                    testList.pop();
                    testList.push(y);
                } else {
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            }
        }
        if (testList.pop().equals("t"))
            v3 = "true";
        else
            v3 = "false";

        for (int i = 0; i < g.length(); i++) {
            char ch = g.charAt(i);
            char z = 't';
            char y = 'f';

            if (ch == 'P') {
                testList.push(z);
                m += z;
            } else if (ch == 'Q' || ch == 'R') {
                testList.push(y);
                m += z;
            } else if (ch == '>') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            } else if (ch == '<') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            } else if (ch == '&') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                }
                m += ch;
            } else if (ch == 'V') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                }
                m += ch;
            } else if (ch == '~') {
                if (testList.ontop().equals("t")) {
                    testList.pop();
                    testList.push(y);
                } else {
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            }
        }
        if (testList.pop().equals("t"))
            v4 = "true";
        else
            v4 = "false";

        for (int i = 0; i < g.length(); i++) {
            char ch = g.charAt(i);
            char z = 't';
            char y = 'f';

            if (ch == 'Q' || ch == 'R') {
                testList.push(z);
                m += z;
            } else if (ch == 'P') {
                testList.push(y);
                m += z;
            } else if (ch == '>') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            } else if (ch == '<') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            } else if (ch == '&') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                }
                m += ch;
            } else if (ch == 'V') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                }
                m += ch;
            } else if (ch == '~') {
                if (testList.ontop().equals("t")) {
                    testList.pop();
                    testList.push(y);
                } else {
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            }
        }
        if (testList.pop().equals("t"))
            v5 = "true";
        else
            v5 = "false";

        for (int i = 0; i < g.length(); i++) {
            char ch = g.charAt(i);
            char z = 't';
            char y = 'f';

            if (ch == 'Q') {
                testList.push(z);
                m += z;
            } else if (ch == 'P' || ch == 'R') {
                testList.push(y);
                m += z;
            } else if (ch == '>') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            } else if (ch == '<') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                }
                m += ch;
            } else if (ch == '&') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                } else if (testList.ontop().equals("f")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(y);
                }
                m += ch;
            } else if (ch == 'V') {
                if (testList.ontop().equals("t")
                        && testList.previousTop().equals("t")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);
                } else if (testList.ontop().equals("t")
                        && testList.previousTop().equals("f")) {
                    testList.pop();
                    testList.pop();
                    testList.push(z);

                }
                m += ch;
            } else if (ch == '~') {
                if (testList.ontop().equals("t")) {

        if (testList.pop().equals("t"))
            v8 = "true";
        else
            v8 = "false";

        if (v1 == "true" && v2 == "true" && v3 == "true" && v4 == "true"
                && v5 == "true" && v7 == "true" && v7 == "true")
            System.out.println("Equivalent");
        else
            System.out.println("Not equivalent");
    }
}

Class ttester:

import java.util.*;
public class ttester {

        public static void main(String args[])
        {
            System.out.println("To test for Tautology, enter your expression \n > means iff \n < means if then \n & means and" +
                    "\nV means Or \n ~ means Not \n \nInput:");

            Scanner scan = new Scanner(System.in);
            String input = scan.nextLine();


            list m = new list();
            m.postfix(input);
            m.Evaluate(m.output);
        }
    }

0 个答案:

没有答案