Что-то не так с моим циклом, но он не дает мне никаких ошибок, чтобы я мог отладить его - PullRequest
0 голосов
/ 01 ноября 2011

Я пишу хеш-таблицу и сузил, откуда исходит проблема.

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 ]

2 голосов
/ 01 ноября 2011

Вы уверены, что эта строка:

if(total>= words.length){

когда-нибудь оценивает истину? Я думаю, что вы никогда не вводите первое утверждение if.

1 голос
/ 01 ноября 2011

Ваша логика опасна для бесконечного цикла, так как ваш флаг установлен в false только в

if{
  }
else if {
}

, и вы никогда не устанавливаете его в другом месте.

Плюс, если ваш первый, еслиэто неправда, вы входите в бесконечный цикл прямо здесь ...

всегда пишите else, когда пишете if ... или думаете о том, что должно произойти, если ваше условие неверно в if.Таким образом, вы избежите много ошибок; -)

Мои 2 цента

1 голос
/ 01 ноября 2011

Вы не показываете нам полный код, но из того, что я вижу, единственное объяснение состоит в том, что вы находитесь внутри цикла, но крайнее условие if total >= words.length никогда не выполняется.

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

Таким образом, ваш код работает в бесконечном цикле, не делая ничего полезного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...