首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的循环出了点问题,但是它没有给我任何错误,所以我可以调试它

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

Stack Overflow用户
提问于 2011-11-02 02:30:19
回答 3查看 115关注 0票数 0

我正在写一个哈希表,并且已经缩小了问题的来源。

代码语言:javascript
复制
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个呢?任何建议都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-02 02:39:06

您没有向我们展示完整的代码,但从我所看到的情况来看,唯一的解释是您在循环中,但是最外面的if条件total >= words.length永远不会被满足。

代码语言:javascript
复制
while(flag) {
  if (...) {  // condition never fulfilled
    ...       // code never reached
  }
}

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

票数 1
EN

Stack Overflow用户

发布于 2011-11-02 02:37:01

你确定这一行:

代码语言:javascript
复制
if(total>= words.length){

是否曾经评估为真?我认为您永远不会输入第一个if语句。

票数 2
EN

Stack Overflow用户

发布于 2011-11-02 02:41:22

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

代码语言:javascript
复制
if{
  }
else if {
}

而且你永远不会把它放在别的地方。

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

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

我的2分

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7971103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档