如何手动调整字符串中的字母

时间:2014-10-03 18:34:25

标签: java string shuffle

我正在编写一个需要从.txt文件中取出一个单词的游戏/ java程序,然后将这些字母混淆并要求用户猜出它是什么单词。我有两个问题:

  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命令(我不能使用),我无法弄清楚如何做到这一点。

  3. 这是我的代码:

    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
    

1 个答案:

答案 0 :(得分: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)

当你阅读时,有一种方法可以随时随地播放。你应该弄清楚,如果你遇到困难,那就回来吧。