2

タスクの場合、スタックを出力するメソッドを作成する必要があります。その部分は簡単です

public void print(stack s)
{
   while(!isEmpty())
   {
      System.out.println(s.peek());
      s.pop();
   }

}

問題は、スタックを印刷した後、私のタスクはスタックの一番下の要素を印刷することです。これは、印刷メソッドで s.pop() を使用した原因ではありません。これは、一番下の要素を印刷するための私のコードです。

public void bottom(stack s)
{
  if(isEmpty())
   {
     System.out.println("Stack is empty");
   }
  else
   {
     System.out.println(stackArray[0]);
   }
}

私の質問は次のとおりです。スタックから要素をポップする必要がないように、印刷方法をどのように変更すればよいですか? または、印刷メソッドを使用した後もスタックが要素を保持するようにする別の方法はありますか?

リクエストされたとおり、これは私たちがクラスで使用しているスタックです (ほとんどはオランダ語です):

public class MyStack
{
    protected Object[ ] stackArray;
    protected int top;
    private int grootte;
    private static final int DEFAULT_GROOTTE = 10;

    public MyStack( )
    {
        grootte = DEFAULT_GROOTTE;
        stackArray = new Object[grootte];
        top = 0;
    }

    public boolean isEmpty( )
    {
        if (top == 0)
                return true;
            else 
                return false;
    }

    public void push(Object e)
    {
        if (top == grootte)
            allocateMore( );
        stackArray[top] = e;
        top++;
    }

    public Object pop( )
    {
            if(isEmpty( ))
            {
                System.out.println("Stack leeg : er kan geen element van de stack afgehaald worden.");
                return null;
            }
                    top--;
                    return stackArray[top];

}
    public Object peek( )
    {
            if(isEmpty( ))
            {
                System.out.println("Stack leeg : er kan geen topelement van de stack getoond worden.");
                return null;
            }
                    return stackArray[top-1];
    }

    public int size( )
    {
        return top;
    }

    private void allocateMore( )
    {
        Object[ ] original = stackArray;
        grootte = grootte * 2;
        stackArray = new Object[ grootte];
        for(int i = 0; i < grootte/2; i++)
        {
            stackArray[i] = original[i];
    }
    }

}

私の担当者は自分の質問に答えるほど高くないので、簡単な編集

これを使用してスタックを印刷する別の方法を見つけたと思います

public void print(stack s)
{
 for(int i =top-1; i>=0;i--)
   System.out.println(stackArray[i]);
}

おそらくそれを行うための最良の方法ではありませんが、機能しています:P

4

4 に答える 4

4

派手なものを使わずにコンテンツだけを見たい場合は、簡単な回避策があります。

System.out.println(Arrays.toString(myStack.toArray()));
于 2016-01-26T07:55:16.647 に答える
0
if (!_stack.empty())

スタックが空かどうかを確認する

for(int i=_stack.size()-1; i>=0;i--)  
System.out.println(_stack.get(i));

スタック値の取得

于 2016-07-25T07:21:13.870 に答える