2017-04-01 17 views
0

私のスペルチェックプログラムはエラーコードを表示せず、同じ単語を何度もスペルチェックするだけです。 この無限ループを止めて、いくつの単語にチェックを入れるか、例えば10単語の間違った単語が修正されたときにコードを終了する方法はありますか?私のプログラムは無限ループするのはなぜですか?

私は無限ループは、ここで、この方法の結果であることはほぼ確実だ:

public static void SpellChecker() throws IOException { 
     dictionary = new Hashtable<String, String>(); 
     System.out.println("Searching for spelling errors ... "); 

     try { 
      // Read and store the words of the dictionary 
      BufferedReader dictReader = new BufferedReader(new FileReader("dictionary.txt")); 

      while (dictReader.ready()) { 
       String dictInput = dictReader.readLine(); 
       String[] dict = dictInput.split("\\s"); // create an array of 
                 // dictionary words 

       for (int i = 0; i < dict.length; i++) { 
        // key and value are identical 
        dictionary.put(dict[i], dict[i]); 
       } 
      } 
      dictReader.close(); 
      String user_text = ""; 

      // Initializing a spelling suggestion object based on probability 
      SuggestSpelling suggest = new SuggestSpelling("wordprobabilityDatabase.txt"); 

      // get user input for correction 
      while (!user_text.equalsIgnoreCase("q")) { 
    // CleanString is a string full of words to be spell checked 
       user_text = cleanString; 
       String[] words = user_text.split(" "); 

       int error = 0; 

       for (String word : words) { 
        suggestWord = true; 
        String outputWord = checkWord(word); 

        if (suggestWord) { 
         System.out.println("Suggestions for " + word + 
         " are: " + suggest.correct(outputWord) + "\n"); 
         error++; 
        } 
       } 

       if (error == 0 & !user_text.equalsIgnoreCase("q")) { 
        System.out.println("No mistakes found"); 
       } 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
      System.exit(-1); 
     } 
    } 
+0

'cleanString'の値は何ですか? –

+0

いくつかのsysログを入れて値をデバッグする.. –

+0

ようこそ!デバッガの使い方を学ぶ必要があるようです。 [補完的なデバッグ手法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)にご協力ください。その後も問題が残っている場合は、問題を示す[最小限の、完全で実証可能な例](http://stackoverflow.com/help/mcve)に戻ってください。 –

答えて

0

彼/彼女が辞めたりしないように望んでいる場合は、whileループの内側から、ユーザーに尋ねることはありません。したがって、user_textcleanStringで初期化され、ループ内で決して変更されないため、無限ループになります。

関連する問題