2016-08-20 2 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

* 왜 * lastElement()' "에 오류 메시지가 표시되면 'pop()'이라고 생각합니까? 또한 스택 추적의 다음 줄에는 * your * 코드의 행 번호가 표시되며,이 행 번호는 'if (s.lastElement(). equals (str_arry [i]))'행을 가리키고, 'if (! s.isEmpty()) s.pop()'라인을 사용합니다. 오류 메시지를 읽는 법을 배우십시오. – Andreas

답변

3

스택 추적에 java.util.Vector.lastElement으로 표시되는 s.lastElement()의 예외를 유발하는 것은 s.pop()이 아닙니다. 즉 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(); 
    } 
}