遍历 ArrayList:for 循环中的 if 语句被完全忽略
Iterating through an ArrayList: if statement within for loop is completely ignored
class MyCircularQueue {
ArrayList<Integer> CirQueue;
public MyCircularQueue(int k) {
CirQueue = new ArrayList<Integer>(k);
}
public boolean isFull() {
for(int s=0; s<this.CirQueue.size(); s++) {
if (this.CirQueue.get(s) == null) {
return false;
}
}
return true;
}
}
如果 CirQueue 中的任何索引为空,isFull() 方法想要 return false。如果它在不触发 if 语句的情况下遍历整个 CirQueue ArrayList,它希望 return 为真。然而,当我调试我的方法时,(在通过构造函数初始化 ArrayList 之后)在 if 语句处设置断点后, 编译器将读取 for 循环 header,然后完全跳过 if 语句只是 return 正确。 为什么会发生这种情况?
带有int参数的ArrayList
构造函数“构造一个具有指定初始容量的空列表”(docs)。这意味着您已经保留了一些 space,但列表仍然是空的,size()
将产生 0,并且没有任何可迭代的内容。
虽然你在构造函数中初始化了CirQueue
的大小,但是你并没有添加元素。也就是说,ArrayList
构造函数ArrayList(int)
只是声明了一个Integer
数组,并没有赋值给它。
我在JShell中测试,CirQueue
为空(容量为0,值为[]
),你应该用null
填充,这样你就不会为空。
由于您使用的是 ArrayList,因此无需使用大小 k 启动它,只需在构造函数中启动一个空的 ArrayList,- 您仍然可以使用您的实现。
public MyCircularQueue() {
CirQueue = new ArrayList<Integer>();
}
ArrayList 具有 Integer 对象,因此您无需在启动时决定大小。然后你可以继续你的 isFull() 代码。你仍然有一个空的 ArrayList。所以你可以在遍历之前先检查 ArrayList 是否为空。但是,即使您使用您没有对象的大小初始化 ArrayList。您应该有要迭代的对象。
class MyCircularQueue {
ArrayList<Integer> CirQueue;
public MyCircularQueue(int k) {
CirQueue = new ArrayList<Integer>(k);
}
public boolean isFull() {
for(int s=0; s<this.CirQueue.size(); s++) {
if (this.CirQueue.get(s) == null) {
return false;
}
}
return true;
}
}
如果 CirQueue 中的任何索引为空,isFull() 方法想要 return false。如果它在不触发 if 语句的情况下遍历整个 CirQueue ArrayList,它希望 return 为真。然而,当我调试我的方法时,(在通过构造函数初始化 ArrayList 之后)在 if 语句处设置断点后, 编译器将读取 for 循环 header,然后完全跳过 if 语句只是 return 正确。 为什么会发生这种情况?
带有int参数的ArrayList
构造函数“构造一个具有指定初始容量的空列表”(docs)。这意味着您已经保留了一些 space,但列表仍然是空的,size()
将产生 0,并且没有任何可迭代的内容。
虽然你在构造函数中初始化了CirQueue
的大小,但是你并没有添加元素。也就是说,ArrayList
构造函数ArrayList(int)
只是声明了一个Integer
数组,并没有赋值给它。
我在JShell中测试,CirQueue
为空(容量为0,值为[]
),你应该用null
填充,这样你就不会为空。
由于您使用的是 ArrayList,因此无需使用大小 k 启动它,只需在构造函数中启动一个空的 ArrayList,- 您仍然可以使用您的实现。
public MyCircularQueue() {
CirQueue = new ArrayList<Integer>();
}
ArrayList 具有 Integer 对象,因此您无需在启动时决定大小。然后你可以继续你的 isFull() 代码。你仍然有一个空的 ArrayList。所以你可以在遍历之前先检查 ArrayList 是否为空。但是,即使您使用您没有对象的大小初始化 ArrayList。您应该有要迭代的对象。