我写了一个for循环,它只会迭代一次,我不知道为什么。我的代码是:
public static void produceOutputFile() throws IOException {
PrintWriter outputFile = new PrintWriter(new FileWriter("created_output_file.txt", true));
for(int j = 0; j < hashTable.length; j++) {
System.out.println(hashTable.length);
System.out.println(j);
if(hashTable[j] != null) {
if(hashTable[j].size() > 1) {
for(int k = 0; k< hashTable[j].size(); j++) {
outputFile.write((hashTable[j].get(k).getWord()) + " " +(hashTable[j].get(k).getFrequency())+"\n");
outputFile.flush();
}
}
else {
outputFile.write((hashTable[j].get(0).getWord()) + " " +(hashTable[j].get(0).getFrequency())+ "\n");
outputFile.flush();
}
}
}
outputFile.close();
}
输出结果为:
16
0
我不确定为什么它不能运行16次。
答案 0 :(得分:4)
在
for(int k = 0; k< hashTable[j].size(); j++) {
您正在递增j
,但使用k
作为索引。这个循环永远运行,因为k
总是小于hashTable[j].size()
(好吧,我假设)。
答案 1 :(得分:1)
for(int k = 0; k< hashTable[j].size(); j++ ) {
outputFile.write((hashTable[j].get(k).getWord()) + " " +(hashTable[j].get(k).getFrequency())+"\n");
outputFile.flush();
}
在你的内部for循环中,你递增J.因此在第一次迭代时j变得大于16.所以第一次循环不会第二次迭代。你的代码应该是正确的
public static void produceOutputFile() throws IOException {
PrintWriter outputFile = new PrintWriter(new FileWriter("created_output_file.txt", true));
for(int j = 0; j < hashTable.length; j++) {
System.out.println(hashTable.length);
System.out.println(j);
if(hashTable[j] != null) {
if(hashTable[j].size() > 1) {
for(int k = 0; k< hashTable[j].size(); k++) {
outputFile.write((hashTable[j].get(k).getWord()) + " " +(hashTable[j].get(k).getFrequency())+"\n");
outputFile.flush();
}
}
else {
outputFile.write((hashTable[j].get(0).getWord()) + " " +(hashTable[j].get(0).getFrequency())+ "\n");
outputFile.flush();
}
}
}
outputFile.close();
}
这里