java

时间:2016-08-20 22:37:50

标签: java data-structures stack

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



    }

我无法检测为什么这个人在线程&#34; main&#34;

  

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

由于代码s.pop()是该异常的原因,但如果我使用s.isEmpty(),这怎么可能呢。

1 个答案:

答案 0 :(得分:3)

导致异常的不是s.pop():它是s.lastElement(),如堆栈跟踪中的java.util.Vector.lastElement所示。这意味着您在调用s.isEmpty()之前必须先检查s.lastElement()

如果堆栈为空,则无法执行任何循环体:将检查移到外面:

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