0

この非常に単純なスタック コンセプトの実装を作成しました。それが正しくてきれいかどうか教えていただけますか?悪いコーディング習慣はありますか?

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());
    }
}
4

3 に答える 3

2

私のコメントは次のとおりです。

  1. のみのスタックとなりますint。ジェネリックにすればいい
  2. これは 10 要素のみのスタックです。あまり役に立たない
  3. numElementsスタック変数のトップに不適切な名前です
  4. top空のスタックのはずthrowと例外 (伝統的に)
  5. popスタックのトップを返す必要があります。今はそうですvoid
于 2012-09-01T15:42:44.460 に答える
2

私がやりたいことがいくつかありますが、そのうちのいくつかは単なる好みの問題です。

  • その機能をよりよく反映するために、「numElements」の名前を「head」に変更します。
  • スタックの最大サイズを指定できるコンストラクターを追加します。
  • pop メソッドは、スタックの一番上の要素を返し、それを削除する必要があります。それが標準的なセマンティックです。
  • top と pop は、空のスタックで呼び出されたときに例外をスローする必要があります。これは、最初にチェックせずに空のスタックが操作されているというエラーを防ぐためです。
于 2012-09-01T15:46:39.963 に答える
1

スタックをジェネリックにする必要があります (他のタイプを追加できるようにする場合)。また、プッシュ メソッド内でチェックを使用して自動的に拡張するようにし、スタックがいっぱいの場合はスペースを再割り当てする必要があります。それ(おそらく前のスペースの2倍の別の配列を作成し、それぞれを1つずつ再割り当てします)。たとえば、リンクされたリストの代わりに配列を使用している場合、そのIMHOは神の考えです。

于 2012-09-01T15:46:21.147 に答える