對比

2016-08-20 27 views
0
for(int i=1;i<str_arry.length;i++){ 

     if(s.lastElement().equals(str_arry[i])){ 

      s.push(str_arry[i]); 

     } 
     else { 
      if(!s.isEmpty()) s.pop(); 
     } 



    } 

我沒能檢測到爲什麼這一個在 java.util.Vector.lastElement給在線程異常「主要」對比

java.util.NoSuchElementException (Vector.java:503)

由於代碼s.pop()是異常的原因,但如果它是我使用s.isEmpty(),怎麼可能這是可能的。

+1

,因爲它不是'pop'這導致了它:它的's.lastElement()',如堆棧跟蹤中的java.util.Vector.lastElement所示。 –

+0

*爲什麼*你認爲這是'pop()'當錯誤消息說「在'lastElement()'」?另外,堆棧跟蹤中的下一行將顯示* your *代碼中的行號,它也將指向「if(s.lastElement()。equals(str_arry [i]))」行,而不是'if(!s.isEmpty())s.pop()'行。學習閱讀錯誤信息。 – Andreas

回答

3

這不是s.pop()這導致了異常:它是s.lastElement(),如堆棧跟蹤中的java.util.Vector.lastElement所示。這意味着在致電s.lastElement()之前,您必須檢查s.isEmpty()

如果堆棧是空的,否則不能執行循環體:外移動的檢查:

for (int i=1;i<str_arry.length;i++) { 
    if (s.isEmpty()) break; // Or some other way to handle it. 

    if (s.lastElement().equals(...) { 
    s.push(...); 
    } else { 
    s.pop(); 
    } 
}