循环不会按预期将项添加到列表中

时间:2016-02-26 13:09:29

标签: java loops

我想基于某个名为GAD的值来聚集一些字母,在每次迭代时我想添加每个聚类具有最高值的字母,这将继续直到没有字母留下。

这里的问题是代码执行第一次迭代是正确的(添加具有群集0的最高值的字母)然后停止,当它应该找到下一个群集的最高字母时。

注意:簇的数量是4.而变量'clusters'是一个对象数组,其中每个对象都包含一个列表。

    do {
        if (count == 4) {
            count = 0;
        }

        for (int j = 0; j < unassignedLetters.size(); j++) {

            if (unassignedLetters.get(j).getGADVal(count) > max) {
                max = unassignedLetters.get(j).getGADVal(count);
                maxLetter = unassignedLetters.get(j);
                System.out.println("maxLetter for cluster " + count + " is: " + maxLetter.getLetter());

            } else if (unassignedLetters.get(j).getGADVal(count) == max) {
                maxLetter = CLDMax(sheet, this.clusters[count], max, maxLetter, unassignedLetters.get(j));
            }
        }
        this.clusters[count].addLetter(maxLetter);
        unassignedLetters.remove(maxLetter);
        System.out.println("Letter " + maxLetter.getLetter() + " has been added cluster " + count);
        maxLetter = null;
        count++;
    } while (unassignedLetters.isEmpty());

2 个答案:

答案 0 :(得分:5)

您的while条件似乎有误:

do{   
  [...]
  for (int j = 0; j < unassignedLetters.size(); j++) {
  [...]
} while(unassignedLetters.isEmpty());

应该是:

while(!unassignedLetters.isEmpty());

答案 1 :(得分:2)

对于初学者来说,你的状况是错误的。

您需要while(!unassignedLetters.isEmpty());。读取:如果unassignedLetters中仍有项目,则继续执行。 目前你有:如果unassignedLetters中没有项目,则继续执行。

do / while循环在检查while条件为真之前执行do {}块中的所有内容。因此,您的代码将执行一次,然后在while条件时中断,unassignedLetters.isEmpty()计算为false。