我一直在用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);
}
}