我试图使用Generics在Java中实现pop()方法,我的方法如下:
public T pop(){
T elem;
if (list!=null){
elem=list.get(this.getSize()-1);
list.remove(this.getSize()-1);
return elem;
}
else return null;
}如果我在堆栈上放置了一些n个值,并且想要打印它们的值,那么我将执行以下操作:
System.out.println(stack.pop());我遇到的问题是,当我想弹出一个n+1值而不是打印一个空值时,它会返回一个错误,即:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1当堆栈为空时,是否存在打印空值的方式?因为我正在返回一个泛型类型T,而且据我所知,Java无法预先判断它将是哪个对象。
谢谢
发布于 2018-06-13 02:40:20
public T pop() {
T elem;
if (list!=null || list.isEmpty()) {
elem=list.get(this.getSize()-1);
list.remove(this.getSize()-1);
return elem;
} else return null;
}检查列表是否为空,而不是空。isEmpty()可能需要根据所使用的结构进行更改。
发布于 2018-06-13 02:41:12
如果您的列表是空的,那么您肯定会得到ArrayIndexOutofBounds,因为您尝试在索引-1处获取元素。您可以使用isEmpty检查list是否为空。
顺便说一句,remove将从列表中返回已删除的元素,您不必事先进行获取。
对于最后一条语句,java泛型是编译时发生的事情。不允许将数组放置到字符串列表中。但它们在运行时没有区别。
发布于 2018-06-13 02:43:56
你必须检查列表是否是空的。
引发异常是因为当列表为空(size = 0)时,您将尝试获取(size -1)元素(index:- 1)。在java中,数组被索引为0,因此ArrayOutOfBoundsException出现了。
public T pop(){
T elem;
if (list != null || list.isEmpty()){
elem = list.get(this.getSize()-1);
list.remove(this.getSize() - 1);
return elem;
}
else return null;
}https://stackoverflow.com/questions/50828317
复制相似问题