2017-10-06 2 views
0

Ich arbeite mit einem Java-Stack, und ich möchte wissen, ob der Stapel mindestens 2 Elemente an der Spitze hat. Ich bin auf nur die Methoden in Stack beschränkt und kann Dinge wie .add() nicht verwenden.Wie überprüft man, ob die obersten zwei Elemente des Stapels existieren?

Mein aktuelles Problem ist, wenn der Wert eines Elements 0 ist. Ich muss mit positiven, negativen und 0-Zoll umgehen. Hier ist mein Code für das Verfahren in Frage:

public static <E> boolean hasTwoElements(Stack<E> stack) { 
    int temp1 = 0; 
    int temp2 = 0; 
    boolean happened = false; 
    if (!stack.isEmpty()) { 
     //check if the assignment is success 
     happened = ((temp1 = (java.lang.Integer) stack.pop()) != 0) 
       && ((temp2 = (java.lang.Integer) stack.pop()) != 0); 

     if (happened) { //if the 2 assignments happened 
      stack.push((E) new Integer(temp2)); //reverse order b/c popped in order 
      stack.push((E) new Integer(temp1)); 
      return true; 
     } 
    } 
    return false; 
} 

Um genauer zu sein, muss ich wissen, ob eine Zuordnung erfolgreich ist oder nicht.

+0

@Andreas 'Ich bin beschränkt auf nur die Methoden in Stack' ... haben Sie Ihre eigenen Forschung und lesen Sie die vollständige Frage? Höchstwahrscheinlich ist dies eine Hausaufgabenfrage, die entworfen wurde, um zu sehen, ob der OP Stack versteht. –

Antwort

0

Wie wäre:

public static <E> boolean hasTwoElements(Stack<E> stack) { 
    return (stack.size() >= 2); 
} 

Stack.size()

+0

Obwohl es eine gute nützliche Antwort ist, ist es eine dumme nutzlose Frage, und die Frage sollte gelöscht werden. Eine nachgestellte Antwort verhindert, dass OP die Frage löscht, also stimme ich Ihre Antwort ab. Es tut uns leid. – Andreas

+0

Ich hätte dies nicht heruntergeregelt, aber wenn die Anforderungen des OP nur die 'Stack'-Methoden push, pop und peek verwenden sollen, dann ist das nicht gültig. –

+0

Hängt davon ab, ob 'size()' als Teil der 'Stack'-API betrachtet wird. Ich würde argumentieren, dass es ist, aber es ist definiert auf "Vector", also wer weiß. – dave

2

anzeigen Wenn Sie wirklich nur Methoden verwenden, die auf der Stack Klasse deklariert werden, und Methoden nicht von übergeordneten Klasse geerbt, dann tun Sie es wie folgt aus:

public static <E> boolean hasTwoElements(Stack<E> stack) { 
    if (stack.empty()) 
     return false; 
    E top = stack.pop(); 
    boolean hasTwo = ! stack.empty(); 
    stack.push(top); 
    return hasTwo; 
} 
+0

Ich mag das besser als meine gelöschte Antwort +1. –

Verwandte Themen