【发布时间】:2013-10-11 06:19:37
【问题描述】:
编辑 - 我修改了我的代码并用新代码替换了我原来的工作,仍然有类似的问题
我正在学习的这个数据结构课程是我的第一门编程课程,所以我有点不适应。第一个项目真的让我大吃一惊。它是做一个逆波兰符号计算器。它或多或少是完整的,只是有很多错误。我一直在花费数小时来调整我的代码,但是当我解决一个问题时,它就会释放出另一个问题。我为我糟糕的编程技巧提前道歉。
公共类 ReversePolishStack {
class SinglyLinkList {
Node head = null;
public void push(float newData) {
Node cache = this.head;
this.head = new Node(newData, cache);
}
public float pop() {
float out = this.head.data;
head = head.next;
return out;
}
public void add(float num1, float num2) {
num1 = pop();
num2 = pop();
push(num1+num2);
}
public void sub(float num1, float num2) {
num1 = pop();
num2 = pop();
push(num2-num1);
}
public void div(float num1, float num2) {
num1 = pop();
num2 = pop();
push(num2/num1);
}
public void mult(float num1, float num2) {
num1 = pop();
num2 = pop();
push(num1*num2);
}
class Node {
public float data;
public Node next;
public Node(float data, Node next) {
this.data = data;
this.next = next;
}
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ReversePolishStack rps = new ReversePolishStack();
SinglyLinkList sll = rps.new SinglyLinkList();
String entry;
do
{
System.out.print("Enter Expression:\n");
Scanner in = new Scanner(System.in);
entry =in.nextLine();
StringTokenizer st = new StringTokenizer(entry," ");
String s1;
int count = 0;
while (st.hasMoreElements())
{
if (entry.length()<4) {// for an error message not enough input
System.out.print("Not enough input"); break;
}
else if (count>1 && sll.head.next==null) {
System.out.print("Not enough operands"); break;
}
s1 = st.nextToken();
if((s1.equals("+") || s1.equals("-") || s1.equals("*") || s1.equals("/"))) {
if(s1.equals("+"))
sll.add(sll.head.data, sll.head.next.data);
else if(s1.equals("-"))
sll.sub(sll.head.data, sll.head.next.data);
else if(s1.equals("/")) {
if (sll.head.data==0) {
System.out.println("Division by Zero enounterd."); break;
}
sll.div(sll.head.data, sll.head.next.data);
}
else if(s1.equals("*"))
sll.mult(sll.head.data, sll.head.next.data);
else
System.out.print("Unrecognized input");break;
}
else {
sll.push(Float.parseFloat(s1));
}
count++;
}
System.out.println(sll.head.data);
sll.pop();
} while(entry.equals("0")== false); // typeing a single zero terminates
System.out.print("Thanks for using my RPN Calculator!");
}
}
我在这方面已经有一段时间了,我确信每次尝试修复一个错误时,我也会添加到作为我的代码的卷积中。任何帮助将不胜感激!
【问题讨论】:
-
让我们一一来吧..你现在的问题是什么:-)
-
那甚至无法编译!在 main 方法中声明的类?这是 c&p 错误吗?
-
我很惊讶这门课程没有先决条件
-
[G V] 主要是我想让人们指出一些大问题,比如我是否做错了什么,就像下一个评论提到的 main 方法中的类。 [Fildor] 感谢您的帮助。 [peeskiller] 有先决条件...... SHHHHHHHHHHHH,但我一直做得很好直到现在。我在班上大约有 1/3 的成绩有 86%。我的一位前军事教授曾经说过,“如果你不作弊,你就没有尝试。”如果继续我的教育是错误的,那么我不想是对的。我承认这对那些试图进入已经完成先决条件的班级的人是不公平的。
标签: java data-structures stack postfix-notation