2013-04-18 2 views
2

для задачи я должен написать метод, который печатает стек, что часть легкостек печати без выскакивают элементы Java

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]); 
    } 
} 

Мой вопрос: Как мне модифицировать метод печати, поэтому мне не нужно выталкивать элементы из стека? Или есть другой способ сделать это так, чтобы стек все еще сохранял мои элементы после использования метода печати?

, как resquested это стек мы используем в наших классах (большинство из них находится в нидерландском):

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

+0

Не могли бы вы добавить свой класс Stack? – Vitaly

+0

Использование Iterator: public void printStack (стек стека) { Итератор <> itr = stack.iterator(); while (itr.hasNext()) { \t sysout (itr.next); } } –

ответ

4

Если вы используете встроенный тип java.util.Stack, то это происходит от Vector, поэтому вы можете использовать getElement(int) для чтения элементов на любой глубине стека.

Если это ваш собственный код, вам нужно будет добавить метод, чтобы сделать то же самое.

В качестве альтернативы вы можете поместить элементы в другой стек или тип List, а затем переустановить стек после печати, но это будет очень неэффективно, и ваш учитель, скорее всего, нахмурится таким решением.

4

Существует простое обходное решение, если вы просто хотите видеть содержимое без каких-либо причудливых вещей.

System.out.println(Arrays.toString(myStack.toArray())); 
0
if (!_stack.empty()) 

Проверьте стек пуст

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

получения стека значений

0

Используйте итератора к петле через стек, так как они работают на любом объекте Collection.

Смежные вопросы