2013-05-23 5 views
1

Я пытаюсь создать ИИ для игры в палач, часть которого требует подсчета всех вхождений каждого возможного символа в списке слов. Я планирую отбирать список слов перед этим подсчетом, чтобы заставить все работать быстрее (сначала отбраковывая все слова, которые не имеют той же длины, что и предполагаемая фраза, а затем путем отбраковки слов, которые не соответствуют угаданным символам).Подсчет вхождений символов в список слов

Проблема, которая возникает у меня, приведена в коде ниже. Так или иначе, он всегда возвращает список e, которые являются правильной длиной (соответствующие числу возможных символов). Я не уверен, что я здесь делаю неправильно, но проблема, безусловно, где-то в countCharacters.

MethodicComputer(){ 
    guessable = parseGuessable(); 
    wordList = parseText(); 
    priorities = countCharacters(guessable); 
} 


public char guessCharacter(String hint){ 
    char guess = 0; 
    System.out.println(guessable); 
    System.out.println(priorities); 
    guess = priorities.charAt(0); 
    priorities = priorities.replaceAll("" + guess, ""); 

    return guess; 
} 

private String countCharacters(String possibleChars){ 
    charCount = new Hashtable(); 
    String orderedPriorities = ""; 
    char temp = 0; 
    char adding = 0; 
    int count = 0; 
    int max = 0; 
    int length = possibleChars.length(); 

    for (int i = 0; i<length; i++){ 
     temp = possibleChars.charAt(i); 
     count = wordList.length() - wordList.replaceAll("" + temp, "").length(); 
     charCount.put(temp, count); 
    } 

    while (orderedPriorities.length() < length){ 
     for (int i = 0; i < possibleChars.length(); i++){ 
      temp = possibleChars.charAt(i); 
      if (max < (int) charCount.get(temp)){ 
       max = (int) charCount.get(temp); 
       adding = temp; 
      } 
     } 
     orderedPriorities += adding; 
     possibleChars = possibleChars.replaceAll("" + adding, ""); 
    } 

    return orderedPriorities; 
} 
+0

Я провел некоторое тестирование на нем и обнаружил, что, хотя вызовы replaceAll выглядят странно, они работают (и я изменил их на более чистую реализацию Character.toString (добавление) вместо «+ + добавление») , но я все еще получаю много e. –

ответ

1

Проблема в том, что я не обновлял максимальную переменную, поэтому она никогда не вводила оператор if и не обновляла добавочную переменную. Простое добавление

max = 0; 

до конца цикла while зафиксировано это.

Смежные вопросы