Ich mache eine Aufgabe, die ich nicht funktionieren kann. Die Idee ist, ein "Wörterbuch" aus einer TXT-Datei in ein Baumset zu laden und zufällige Buchstaben (6-10 Buchstaben) zu erzeugen und zu versuchen, Wörter aus diesen Buchstaben zu konstruieren. Das Programm prüft, ob das erratene Wort im Treeset ist. Wenn Sie jedoch mit dem Raten fertig sind, können Sie STRG + Z eingeben, und das Programm beendet und druckt alle möglichen Wörter aus, die aus den zufälligen Buchstaben des Wörterbuchs bestehen können.Alle Strings aus TreeSet drucken, die einige Anforderungen erfüllen?
Mein Problem ist, wenn ich STRG + Z eingeben, die meiste Zeit druckt das Programm nicht alle mögliche erraten-Worte, manchmal tut es sehr wenige.
Was habe ich verpasst?
Hier ist mein Code:
public class AngloTrainer {
TreeSet<String> dict = new TreeSet<String>();
int ranNum;
String randomWord;
public AngloTrainer(String dictionaryFile) throws IOException {
loadDictionary(dictionaryFile);
System.out.println(dict.size() + " words loaded from dictionary.txt ");
Random randNumb = new Random();
ranNum = (randNumb.nextInt(6) + 4);
randomWord = randomLetters(ranNum);
System.out.println("The random letters are: " + randomWord);
Scanner reader = new Scanner(System.in);
System.out.println("Guess a word!");
try{
while(reader.hasNextLine() != false){
String gWord = reader.next();
if(includes(sort(randomWord), sort(gWord))){
if(dict.contains(gWord)){
System.out.println("ok!");
}else{
System.out.println("not ok!");
}
}else{
System.out.println("not ok!");
}
}
}finally{
reader.close();
printWords();
System.out.println("bye");
System.exit(0);
}
}
//print all the words that can be guessed
public void printWords(){
for(String words: dict){
if(includes(randomWord, words)){
System.out.println(words);
}
}
}
//sort the letters in a String alpabetically
private String sort(String s){
char[] charArray = s.toCharArray();
Arrays.sort(charArray);
return new String(charArray);
}
//print out the whole dictionary
private void dumpDict() {
for(String word: dict){
System.out.println(word);
}
}
//load the words from .txt file into TreeSet
private void loadDictionary(String fileName) throws IOException{
BufferedReader bufRead = new BufferedReader(new FileReader(new File(fileName)));
for (String line; (line = bufRead.readLine()) != null;) {
dict.add(line);
}
bufRead.close();
}
//generate random letters
private String randomLetters(int length) {
Random randomGenerator = new Random();
String letters = "aabcdeefghiijklmnoopqrstuuvwxyyz";
StringBuffer buf = new StringBuffer(length);
for (int i = 0; i < length; i++)
buf.append(letters.charAt(randomGenerator.nextInt(letters.length())));
return buf.toString();
}
//check if one the letters in one string is included in the other one
private boolean includes(String a, String b) {
if (b == null || b.length() == 0)
return true;
else if (a == null || a.length() == 0)
return false;
int i = 0, j = 0;
while (j < b.length()) {
if (i >= a.length() || b.charAt(j) < a.charAt(i))
return false;
else if (b.charAt(j) == a.charAt(i)) {
i++; j++;
} else if (b.charAt(j) > a.charAt(i))
i++;
}
return true;
}
public static void main(String[] args) throws IOException {
AngloTrainer at = new AngloTrainer("C:/Some/Where/In/Files/dictionary.txt");
}
}
Danke für die Hilfe! –