2014-10-03 64 views
0

我正在寫一個遊戲/ java程序,需要從.txt文件中取出一個字,然後混合字母並要求用戶猜測它是什麼字。我有兩個問題:如何手動洗牌字符串中的字母

  1. 首先是當我運行它,我收到此錯誤信息:

    Exception in thread "main" java.util.NoSuchElementException: No line found 
    at java.util.Scanner.nextLine(Unknown Source) 
    at Proj4.main(Proj4.java:20) 
    
  2. 我遇到的第二個問題是混雜的詞。我不知道如何做到這一點,而不使用shuffle命令(我不能使用)。

這裏是我的代碼:

import java.util.Scanner; 
import java.util.Random; 
import java.io.*; 

public class Proj4 { 

    public static void main(String[] args) throws IOException { 
     Scanner inFile = new Scanner(new File ("words.txt")); 

     int counter = 0; 
     while (inFile.hasNext()) { 
      inFile.nextLine(); 
      counter++; 
     } 

     String[] word = new String[counter]; 

     for (int j = 0; j < counter; j++) { 
      word[j] = inFile.nextLine(); 
     } 

     int lengthList = Integer.parseInt(word[0]); 
     Scanner s = new Scanner(System.in); 
     Random randomNumber = new Random(); 
     int i = randomNumber.nextInt(lengthList); //picks a word at random. assigns to "word" 
     String currentWord = word[i];//picks a word at random. assigns to "currentWord" 
     int turnScore = 10, finalScore = 0; 
     char input; 
     String guess ="a"; 

     do { //do loop for whole program looping 
      turnScore = 10; 
      do { //do loop for guessing correct      
       do{ 
        System.out.println("Current Puzzle: " + currentWord); 
        System.out.println("Current points for this word: " + turnScore); 
        System.out.println("Enter (g)uess, (n)ew word, (h)int, or (q)uit: "); 
        input = s.nextLine().charAt(0); //assigns input to first letter entered by user 
        Character.toLowerCase(input); //puts input to lower case 
        if(input != 'g' && input != 'G' && input != 'h' && 
         input != 'H' && input != 'n' && input != 'N' && 
         input != 'Q' && input != 'q'){ 
         System.out.println("Invalid Entry. Please input g, n, q or h only! \n "); 
        }       
       } while (input != 'g' && input != 'G' && input != 'h' && input != 'H' && 
        input != 'n' && input != 'N' && input != 'Q' && input != 'q'); //end do while loop (ask for input) 

       if (input == 'g') { 
        System.out.println("Enter Your guess: "); 
        guess = s.nextLine(); 
        System.out.println("your guess is: " + guess + "\n\nThe word is: " + currentWord); 

        if (guess.equalsIgnoreCase(currentWord)) { 
         System.out.println("You Guessed Correct"); 
         System.out.println("Your Score for this word is: " +turnScore); 
         finalScore = finalScore + turnScore; 
        }//end if guess = currentWord 
        else 
        {        
         if (turnScore <= 0) 
         { 
          turnScore = 0; 
         }//end if turn score >=0 
         else 
         { 
          turnScore -= 1; 
         }//end else turn score minus 1. 

         System.out.println("Nope, Sorry \n\n"); 
        }//end else guess not = to currentWord. 
       }//end if user input = G.        
       else if (input == 'n') 
       { 
        i = randomNumber.nextInt(); 
        currentWord = word[i]; 
        turnScore = 10; 
       }//end new word if 
       else if (input =='h') 
       { 
        turnScore = turnScore/2; 
        Random ranNum = new Random(); 
        int randomLetter = ranNum.nextInt(5); 
        char hint = currentWord.charAt(randomLetter); 
        System.out.println("the Letter at spot " + (randomLetter +1) + " is " + hint); 
       }//end of if input = h 
       else if (input == 'q') 
       { 
        finalScore = finalScore + turnScore; 
        System.out.println("Goodbye!"); 
        System.out.println("Final Score: " + finalScore); 
        System.exit(0); 
       }//end else if for input = Q.        
      }while (!guess.equalsIgnoreCase(currentWord));     
     }while (input != 'q'); 

     System.out.println("Your Final Score is: " + finalScore); 
     System.out.println("Goodbye!"); 
     inFile.close(); 
    }//End main 

}//end class 

回答

0

你的異常是由幾行代碼引起的:

int counter = 0; 
    while (inFile.hasNext()) { 
     inFile.nextLine(); 
     counter++; 
    } 

    //inFile no longer has next, will break when the for loop is entered 

    String[] word = new String[counter]; 
    for (int j = 0; j < counter; j++) { 
     word[j] = inFile.nextLine(); 
    } 

最簡單的辦法來解決這個問題是要重新聲明INFILE和讀取重新開始。

解決這個問題的最好辦法是使用動態調整大小的ArrayList:

int counter = 0; 
    ArrayList<String> word = new ArrayList<String>(); 
    while (inFile.hasNext()) { 
     word.add(inFile.nextLine()); 
     counter++; 
    } 

這也使您的隨機化更容易,因爲你可以做一些偷偷摸摸的吧。

以下是關於ArrayList的文檔。

的關鍵,而不是解決方案,你的第二個問題在於add(int index, E element)

有一個辦法,當你閱讀洗牌的飛行。你應該弄清楚,如果你卡住了,然後回來。

相關問題