我试图制作堆栈并遇到问题,每当我尝试检查索引值时,我都会遇到NullPointerException。
private E[] items;
public Stack(Class<E> type) {
E[] items = (E[]) new Object[10];
}
public boolean isEmpty(){
if(items[0] == null){
return true;
}
return false;
}
当我跑步时
public static void main(String[] args) {
Stack<String> myStack = new Stack<>( String.class );
System.out.println(myStack.isEmpty());
}
我在
获得了NullPointerExceptionif(items[0] == null)
在调用isEmpty()时。
显然我知道items [0]此时应为null,并且希望能够根据它是否为null来执行操作,在这种情况下,由于堆栈为空,因此返回true。如何在不获取NullPointerException的情况下执行此操作?
答案 0 :(得分:1)
构造函数中的行
items
创建一个局部变量但不初始化您的类字段items = (E[]) new Object[10];
。使用
items
编译器会发出警告,double time_diff(struct timeval x , struct timeval y);
int main()
{
int i;
struct timeval before , after;
gettimeofday(&before , NULL);
//Time taking task
for (i=1 ; i <= 100 ; i++)
{
printf("%d %d %d n",i, i*i, i*i*i);
}
gettimeofday(&after , NULL);
printf(" time elapsed : %.0lf" , time_diff(before , after) );
return 0;
}
double time_diff(struct timeval x , struct timeval y)
{
double x_ms , y_ms , diff;
x_ms = (double)x.tv_sec*1000000 + (double)x.tv_usec;
y_ms = (double)y.tv_sec*1000000 + (double)y.tv_usec;
diff = (double)y_ms - (double)x_ms;
return diff;
}
未被使用,因此最好注意这些警告。
答案 1 :(得分:0)
此外,在制作泛型课程时,我建议稍微改变一下。您可以将类声明为通用类,而不是将类作为构造函数参数传递,它将起到相同的作用。
public class Stack<E>
{
private E[] items;
public Stack() {
items = (E[]) new Object[10];
}
public boolean isEmpty(){
if(items[0] == null){
return true;
}
return false;
}
public E push(E item){
...
}
public E peek(){
...
}
.
.
.
}
然后你的主要课程看起来像:
Stack<String> myStack = new Stack<String>();
myStack.push("hi");
System.out.println(myStack.isEmpty());
这更接近地模仿java在泛型类中构建的约定。