问题描述
我已经为此挠头好几个小时了,但我似乎无法弄清楚这一点。 我正在编写一个程序,该程序在一个线程中具有一个恒定循环,它偶尔会使用 Arraylist 将数据发送回程序的另一部分。
我只想在我的数组列表中收集 11 个项目后将这些数据发回。所以我使用了这个代码:
//The rest of the loop in which i gather the values for key and veLocity.
notenbuffer.add(new Noot(key,veLocity));
if (notenbuffer.size() > 10){
System.out.println("Notenbuffer > 10,verstuur data");
if (notenbuffer.isEmpty()){
System.out.println("buffer is empty!");
}
else {
usbRead.writeNotes(notenbuffer);
System.out.println("emptied the buffer!");
notenbuffer.clear();
}
}
现在出于某种奇怪的原因,程序从不清空 Arraylist,只是不断向其中添加项目。我已经检查过,它确实到达了 usbRead.writeNotes(notenbuffer)
部分,因为该函数被正确调用。当我使用调试器时,它只是在调用此函数后跳到循环的开头。
有没有办法在 Arraylist 达到一定大小后清空它?
编辑:我写了一个逻辑错误 if (notenbuffer.isEmpty())
this will always be false 因为我已经在一个 if 语句中,它要求 this 为 false。
解决方法
您是否不小心将第二个 if 放入了第一个中? (缺少的缩进似乎表明如此)。有如果 (notenbuffer.isEmpty()) 在 if (notenbuffer.size() > 10) 块内 在逻辑上完全没有意义。毕竟,如果您的列表大小 > 10 那么列表显然不是空的。所以如果 (notenbuffer.isEmpty()) 永远不可能是真的。 – OH GOD SPIDERS 15 分钟前
这确实是问题所在。删除它会暴露一个需要解决的 NoClassDefFoundError。