0

ほとんどのエラーがある私のプログラムの一部は次のとおりです。

    //play method
    private void play() throws IOException
    {
        do {
            guess(alphabet);
            usedLetters(used, alphabet);

            do {
                System.out.println("You have already guessed this " + alphabet + " and the others listed above.");
                guess(alphabet);
            } while (letterUsed == true);//will keep asking until letter was not used

            if (letterUsed == false)
            {
                life--;
                underWord(currentWord , checkLetter, used);
            } //only if the letter was not used, it will be checked for in the current word trying to be solved

            if (life == 0) {
                checkWord(currentWord , checkLetter);
            }
        } while (checkLetter != currentWord);

    }

特に、このメソッドには現時点ですべてのエラーがあります。ユーザーに 1 つのアルファベットの推測を尋ね、それが現在推測しようとしている単語に含まれているかどうかを確認する必要があります。また、同じ文字を2回推測して命を失うことがないように、すでに推測したすべての文字を保存します。彼女には 3 つの配列があります。1 つは使用済みの文字を格納するため、もう 1 つは既に推測された単語の部分 (および _ が必要な部分) を格納するため、もう 1 つは推測しようとしている単語を格納するためです。必要なタスクを実行するために、このメソッドを以下に記述するより良い方法はありますか?

//underWord method to return the word with all characters not in letters replaced by _'s
private void underWord(char currentWord[] , char checkLetter[], char used[]) throws IOException //add parameters what it recieves
{

    for (int i = 0; i<currentWord.length; i++) {
       for (int index = 0; index<checkLetter.length; index++){
               if (used.contains(currentWord.charAt(i)))
            {
                checkLetter[index] =  currentWord.charAt(i);
            }

            else
            {
                checkLetter[index] = '_';
            }
          }
    }
    for (int i = 0; i < checkLetter.length; i++)
    {
        System.out.println(checkLetter[i]);
    }
}//End of maskWord method

コンパイルすると、次のようになります。

C:\Users\HOME\Documents\JCreator LE\MyProjects\twoHangman\src\twoHangman.java:289: error: cannot find symbol
               if (used.contains(currentWord.charAt(i)))
                                            ^
symbol:   method charAt(int)
location: variable currentWord of type char[]

C:\Users\HOME\Documents\JCreator LE\MyProjects\twoHangman\src\twoHangman.java:291: error: cannot find symbol
                checkLetter[index] =  currentWord.charAt(i);
                                                 ^
symbol:   method charAt(int)
location: variable currentWord of type char[]

C:\Users\HOME\Documents\JCreator LE\MyProjects\twoHangman\src\twoHangman.java:312: error: cannot find symbol
    alphabet = kb.readline().charAt(0);
                 ^
symbol:   method readline()
location: variable kb of type BufferedReader

Buffered Reader を使用するのは初めてで、何が問題なのかわかりません

//guess method to ask for user's guess

private void guess(char alphabet) throws IOException//add parameters what it recieves
{
    System.out.println("Guess a letter in this 5-letter word: ");
    alphabet = kb.readline().charAt(0);
    used[dataSize] = alphabet;
    //adds guess to used letters array

}


//usedLetters method to check if user's guess has already been guessed
private boolean usedLetters(char used[], char alphabet) throws IOException
{
    for(int x=0; x<used.length; x++)
    {
        if(alphabet == used[x])
        {
            letterUsed = true;
            return letterUsed;
        }
        else
        {
            letterUsed = false;
            return letterUsed;
        }
     }

     for (int index = 0; index < used.length; index++) {
        System.out.println(used[index]);
    }


}


//checkWord method to see if the user has got the correct word

private void checkWord(char currentWord[], char checkLetter[]) throws IOException
{
    for(int x=0; x<currentWord.length; x++)
    {
        if(checkLetter == currentWord)
        {
            System.out.println("HUZZAH! You have guessed the word!");
            System.out.println("You have completed this game of hangman.");
            menu();
        }

        System.out.println("You have run out of guesses!");
        System.out.println("The word was:");
        for (int index = 0; index < currentWord.length; index++)
        {
            System.out.print(currentWord[index]);
        }
        menu();
    }
}
4

3 に答える 3

1

まず、Java では大文字と小文字が区別 されreadlineます。readLine


さらに重要なのcurrentWordは、char 配列です。index の char にアクセスするには、代わりに をi使用します。currentWord[i]currentWord.charAt(i)

また、は配列なused.contains(anything)ので使用できません。usedループしusedて一致を確認してください。

于 2012-12-21T02:16:47.827 に答える
1

@irrelephant が指摘したように、readLine()のスペルが間違っています。

L大文字にする必要があります。


他のエラー メッセージも非常に単純です。

配列にはそのようなメソッドcharAt()がないことを示しています。

Java では、配列にはメソッドがありません。

ただし、StringにはcharAt()という名前のメソッドがあります。

Java では、文字の配列と文字列の間に違いがあります。

変数checkLetterおよびcurrentWordは文字列 (char 配列ではない) である必要があります。


これらのエラーを自分で処理する方法を学ぶと、はるかに役立つでしょう。

コンパイル エラーが発生するたびに StackOverflow にアクセスすると、あなたと私たちの両方の時間が無駄になります。

于 2012-12-21T02:17:11.977 に答える
1

currentWordとして宣言されていchar currentWord[]ます。これは、currentWordが の配列であることを意味しcharます。Java では、これはString. 特に、配列にはメソッドがありません。currentWord[i]ではなくなどの配列添字を使用する必要がありますcurrentWord.charAt(i)Stringまたは、ではなくを使用するようにプログラムを設計することもできますchar[]

于 2012-12-21T02:36:44.387 に答える