2012-09-01 46 views
0

我创建了这个非常简单的堆栈概念的实现。 你能告诉我它是否正确和干净?你是否看到任何不良的编码习惯?Java和堆栈:正确的实现?

public class MyStack 
{ 
    private static final int MAXELEMENTS = 10; 
    private int[] elements; 
    private int numElements; 

    public MyStack() 
    { 
     numElements = 0; 
     elements = new int[MAXELEMENTS]; 
    } 

    public boolean isEmpty() 
    { 
     return (numElements == 0); 
    } 

    public boolean isFull() 
    { 
     return (numElements == MAXELEMENTS); 
    } 

    public void push(int e) 
    { 
     if (!isFull()) 
      elements[numElements++] = e; 
    } 

    public int top() 
    { 
     if (!isEmpty()) 
      return elements[numElements - 1]; 
     else 
      return -1; 
    } 

    public void pop() 
    { 
     if (!isEmpty()) 
      numElements--; 
    } 
} 

您可以用下面的代码使用它:

class MyStackTestDrive 
{ 
    public static void main(String[] args) 
    { 
     MyStack s1 = new MyStack(); 
     MyStack s2 = new MyStack(); 
     s1.push(2); 
     s2.push(4); 
     System.out.println(s1.top()); 
     System.out.println(s2.top()); 
    } 
} 
+5

您将得到更好的答案,询问这http://codereview.stackexchange.com/ – 2012-09-01 15:28:58

+1

我想说一下java.lang.Stack一个很好的实现 – Chris

+0

@克里斯我在哪里可以找到它? –

回答

2

有一些事情我会做,他们有的只是一个优先事项:

  • 重命名“包含numElements”到“头”,以更好地反映其功能。
  • 添加一个构造函数,其中可以指定堆栈的最大尺寸。
  • pop方法应返回堆栈的顶层元素并将其删除。这是标准的语义。
  • top和pop应该在空堆栈上调用时抛出异常。这是为了防止在没有首先检查空堆栈的情况下发生错误。
2

我的意见是:

  1. 这将是唯一int堆栈。你应该使它通用
  2. 这是一个只有10个元素的堆栈。没多大用处
  3. numElements与堆栈变量
  4. top应该throw和异常空栈之上的坏名声(传统)
  5. pop应该返回堆栈的顶部。现在它是void
+0

感谢您的建议;) –

1

你应该尽量让你的筹码通用的(如果你想允许任何其他类型的被添加到)也,你应该尽量做到自动增长,通过内单向的push方法,如果它已满,则为它重新分配空间(创建另一个数组,可能是之前两次的空间,并逐一地实现)。例如,任何你使用数组而不是链接列表的方式,恕我直言是一个上帝的想法。