为什么 Java 永远不会结束这个 if/else?

问题描述

我已经为此挠头好几个小时了,但我似乎无法弄清楚这一点。 我正在编写一个程序,该程序在一个线程中具有一个恒定循环,它偶尔会使用 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。