我想基于某个名为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());
答案 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。