2017-10-06 120 views
0

我正在使用Java堆棧,我想知道堆棧是否至少有2個項目在頂部。我僅限於Stack中的方法,不能使用像.add()這樣的東西。如何檢查堆棧的前兩個元素是否存在?

我目前的問題是什麼時候一個元素的值是0.我必須處理正面,負面和0整數。這裏是我的問題的方法代碼:

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

更具體,我需要知道的轉讓是否成功。

+0

@Andreas'我僅限於Stack中的方法......你是否做了自己的研究並閱讀完整的問題?很可能,這是一個作業問題,旨在瞭解OP是否理解堆棧。 –

回答

0

如何:

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

Stack.size()

+0

雖然這是一個很好的有用答案,但這是一個愚蠢的無用問題,應該刪除問題。有了最新的答案可以防止OP刪除問題,所以我對您的答案進行了投票。抱歉。 – Andreas

+0

我不會低估這個,但如果OP的要求是隻使用'Stack'方法push,pop和peek,那麼這是無效的。 –

+0

取決於size()是否被認爲是堆棧API的一部分。我認爲它是,但它是在'Vector'上定義的,所以誰知道。 – dave

2

如果你真的可以使用從父類繼承的是在Stack類中聲明僅方法,而不是方法,那麼像這樣做:

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

我喜歡這個比我刪除的答案+1更好。 –