我的循环有问题,但它没有给我任何错误,所以我可以调试它

时间:2011-11-01 18:30:19

标签: java loops hash

我正在编写一个散列表,并缩小了问题的来源。

void put(String word, int line)
{
  boolean flag = true;
  int val = getValue(word);
  val = val%10;

  System.out.println(val);

  while ( flag )
  {
    if( total >= words.length )
    {
      System.out.println("2");

      if( words[val] == null )
      {
        System.out.println("3");
        total++;
        words[val] = new Word(word);
        words[val].addLine(line);
        System.out.println(word);
        flag = false;
      }
      else if ( words[val].equals(word) )
      {
        System.out.println("4");
        words[val].addOne();
        words[val].addLine(line);
        flag = false;
      }
      val++;
      if ( val == words.length )
        val=0;

      System.out.println("5");
    }
  }
  System.out.println("2");
}

它只打印出val,然后继续给我一个装载标志。或许循环有问题吗?但如果是这样的话,为什么它至少打印2-5?任何建议都会受到赞赏。

3 个答案:

答案 0 :(得分:2)

你确定这一行:

if(total>= words.length){

曾经评估过真的吗?我想你永远不会进入第一个if语句。

答案 1 :(得分:1)

您没有向我们展示完整的代码,但从我可以看到的唯一解释是您在循环内部但是最外面的条件total >= words.length永远不会实现。

while(flag) {
  if (...) {  // condition never fulfilled
    ...       // code never reached
  }
}

因此,您的代码在无限循环中运行,而根本没有做任何有用的事情。

答案 2 :(得分:1)

您的逻辑对于无限循环是危险的,因为您的标志仅在

中设置为false
if{
  }
else if {
}

你永远不会把它放在其他地方。

另外,如果你的第一个if不是真的,你就进入一个无限循环......

当你写一个if时总是写一个else ...或者想一想当你的条件不是真的时会发生什么。这样你就可以避免很多bug; - )

我的2美分