【问题标题】:First Java Data Structures Assignment第一个 Java 数据结构分配
【发布时间】: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


【解决方案1】:

首先你应该从主方法中取出你定义的类。 之后你会得到一个错误,因为在没有创建外部类 (ReversePolishStack) 的情况下创建了类 singlyLinkList (singlyLinkList sll = new singlyLinkList();) 的实例。

参见参考this link about nested classes

我还将Node 类放入singlyLinkList 类中(顺便说一句,您应该将该类重命名为SinglyLinkList,首字母大写)。

我没有深入了解您代码的逻辑,但至少在这些修复之后您的代码将编译:

public class 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;
        }

        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) {
        float number1;
        float number2;
        ReversePolishStack rps = new ReversePolishStack();
        singlyLinkList sll = rps.new singlyLinkList();
        System.out.print("Enter Expression:\n");
                // from here will be the same as you wrote
        }
}

我还建议你从你的 main 方法中提取程序的逻辑,并在 ReversePolishStack 中创建方法,以便使用 oop 概念。

希望这很有用! 咻!

【讨论】:

    猜你喜欢
    • 2021-04-04
    • 1970-01-01
    • 2016-02-08
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多