2013-03-22 29 views
0

我正在嘗試做一些'邪惡的Hang子手遊戲'(漂亮的斯坦福CS演習)。遊戲的目的是通過儘可能多地移除儘可能多的字詞解決方案來「欺騙」,以便用戶在最終結束之前無法猜測。Java - 掃描器不會刪除所有需要的對象

我已經做了一個循環(下圖),似乎刪除了許多單詞可能的單詞,但由於某種原因它並沒有刪除所有這些單詞。輸入是一個包含約120K字的dictionary.txt文件。

當我「猜」字母「a」時,它會帶走大約60-70%的帶有「a」的單詞(基於輸出與txt文件中第一對單詞之間的比較進行估計)

File file = new File("dictionary.txt"); 
    Scanner textScan = new Scanner(file); 

    List<String> wordList = new ArrayList<String>(); 

    while (textScan.hasNext()) 
     { 
      word = textScan.next(); 
      wordList.add(word); 

     } 
    System.out.println("The ArrayList has " + wordList.size() + " objects stored in it."); 


    Scanner textScan1 = new Scanner(file); 

    for(int i = 0; i <= guessNumber; i++) 

    { 
     Collections.sort(wordList); 

     System.out.println("Type in your guess as a letter "); 
     String guess = keyboard.next(); 
     guess = guess.toLowerCase(); 

    while (textScan1.hasNext()) 
    { 
     String word1 = textScan1.next(); 
     if (wordLength != word1.length() && word1.contains(guess)) 
      { 
      wordList.remove(word1); 
      } 


    } 
    } 

我知道我的代碼在這一點上有點混亂,我試圖改進關於我的編程的一切,所以所有的反饋都非常感謝!我有一種感覺,那就是我不需要在那裏等東西。

,我將發佈的情況下,幫助下整個代碼:

import java.util.*; 
import java.lang.*; 
import java.io.*; 




public class EvilHangman 

{ 


public static void main(String[] args) throws IOException 
{ 
    // declaring variables 
    int wordLength; 
    int guessNumber; 


    // initiate the scanner 
    Scanner keyboard = new Scanner(System.in); 




    // introduction and prompting the user for word length 

    System.out.println("Welcome to Hangman. Let's play! "); 
    System.out.println("Please enter the desired word length: "); 
    wordLength = keyboard.nextInt(); 

    while(wordLength < 0 || wordLength > 26) 
    { 
     System.out.println("This is not a valid word length. "); 
     System.out.println("Please enter the desired word length: "); 
     wordLength = keyboard.nextInt(); 
    } 

    // prompt the user for number of guesses 

    System.out.println("How many guesses do you want to have? "); 
    guessNumber = keyboard.nextInt(); 

    while(guessNumber < 0) 
    { 
     System.out.println("Number of guesses has to be a postive integer. "); 
     System.out.println("Please enter the desired number of guesses: "); 
     guessNumber = keyboard.nextInt(); 
    } 


    // count the number of words with the specified length 

    /* int wordCount = 0; 
    String word = null; 
    while (textScan.hasNext()) 
    { 
     word = textScan.next(); 
     if (word.length() == wordLength) 
      { 
      wordCount++; 
      } 


    } 
    */ 


    // prompts the user whether he/she wants a running count of word length - using next() instead of nextLine() to clear buffer 

    /* System.out.println("Do you want a running total of number of words remaining? "); 
    String runningTotal = keyboard.next(); 

    if (runningTotal.equalsIgnoreCase("yes")) 
     System.out.println("Words with that length: " + wordCount); 
    */ 

    // create a list (array) of all the words that matches the input length 
    String word = null; 


    File file = new File("dictionary.txt"); 
    Scanner textScan = new Scanner(file); 

    List<String> wordList = new ArrayList<String>(); 

    while (textScan.hasNext()) 
     { 
      word = textScan.next(); 
      wordList.add(word); 

     } 
    System.out.println("The ArrayList has " + wordList.size() + " objects stored in it."); 


    Scanner textScan1 = new Scanner(file); 

    for(int i = 0; i <= guessNumber; i++) 

    { 
     Collections.sort(wordList); 

     System.out.println("Type in your guess as a letter "); 
     String guess = keyboard.next(); 
     guess = guess.toLowerCase(); 

    while (textScan1.hasNext()) 
    { 
     String word1 = textScan1.next(); 
     if (wordLength != word1.length() && word1.contains(guess)) 
      { 
      wordList.remove(word1); 
      } 


    } 
    } 

    System.out.println("The ArrayList has " + wordList.size() + " objects stored in it."); 
    System.out.println(wordList); 
+2

字典中的所有單詞都是小寫字母嗎?如果是這樣,這行'guess = guess.toLowerCase();'也許是問題,因爲你只是檢查小寫字母。 – 2013-03-22 02:21:40

回答

0

終於想通了它與掃描儀做。它必須在循環內啓動

for(int i = 1; i <= guessNumber; i++) 

    { 
     Scanner textScan2 = new Scanner(file1);   
     System.out.println("Type in your guess as a letter "); 
     String guess = keyboard.next(); 
     //System.out.print(guess); 

    while (textScan2.hasNext()) 
    { 

     String word1 = textScan2.next(); 
     if (wordLength != word1.length() || (word1.contains(guess))) 
      { 
      wordList.remove(word1); 
      } 





    } 
    }