for Loop不会迭代

时间:2014-04-01 02:46:37

标签: java

我写了一个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次。

2 个答案:

答案 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();
  } 

这里