2

Java で伝統的なハングマン ゲームをプログラミングしています。私が現在立ち往生しているのは、ユーザーの文字入力が 内の文字ではないかどうかを調べることですString

if(getLetters.indexOf(userCharInput)==-1) //getLetters is the StringBuilder, and the userCharInput is a String.
{
     playerCounter++;
}

これは私が問題を抱えているように見えるセクションです。さまざまindexOfな例を見て、プログラムで動作するようにこれを定式化しました。

問題は、うまくいかないことです。デフォルトの単語は「apple」なので、プレイヤーが単語を推測するチャンスが 3 回あるように設定しました。今、私は意図的に3つの間違った推測を行い、次の処理を行いませんelse if:

else if(playerCounter == 3)
{
    System.out.println("All lives are gone! Game Over!");
    playerCounter = 1; //resets the playerCounter to one.
    System.exit(0);
}

どんな助けでも大歓迎です。

4

4 に答える 4

3

これは、間違った文字を推測し続けると、最初のifステートメントが true と評価されるためです。

if(getLetters.indexOf(userCharInput)==-1) //getLetters is the StringBuilder, and the userCharInput is a String.
{
     playerCounter++;
}

したがって、playerCounter を増やし続けます (3 を超えます)。これは、次のステートメントに到達できないことを意味します (3 を超えると、少なくともこれまでに投稿したコードでは、それ以上小さくなることはありません)。そのelse if (playerCounter == 3)ため、到達できない場合があります。

于 2012-12-31T22:58:41.143 に答える
1

私はあなたelse ifが真になっている別の if ステートメントの一部だと思うので、それをチェックしてください。

于 2012-12-31T22:52:33.970 に答える
0

それが機能しなかった理由は、indexOfメソッドが不適切に使用されていたためであり、部分的にはifステートメントの順序が原因でしたが、それは主要な問題に対して非常に小さなものでした。変更しなければならなかったのは、私がその方法を使用したindexOf方法でした。

すなわち。代わりに、推測する必要のある単語が どこにgletter.indexOf(character);あるべきであり、ユーザーの推測を追跡するために使用されていました。word.indexOf(character);wordgletterStringBuilder

于 2013-01-01T02:53:17.523 に答える
-2

StringBuilder の Javadoc は次のとおりです。

あなたが投稿したコードに基づいて、私は推測しています:

1) getLetters に必要な文字 (たとえば、"apple" という単語の文字) を保存しています。

2) getLetters は StringBuilder 型です

3) userCharInput が「char」型の場合、indexOf() はおそらく期待される結果をもたらさないでしょう。

4)「else if」を「if」に置き換えます

提案:

「getLetters」を「String」に変更してみて、それが役立つかどうかを確認してください。

while (...) {
  ...
  //getLetters is the StringBuilder, and the userCharInput is a String.
  if(getLetters.indexOf(userCharInput)==-1)  {
     playerCounter++;
  }
  // Debug: comment this out once it's working
  System.out.println ("userCharInput=" + userCharInput + ", playerCounter=" + playerCounter);
  if(playerCounter == 3) {
    System.out.println("All lives are gone! Game Over!");
    playerCounter = 1; //resets the playerCounter to one.
    System.exit(0);
  }
  ...
}
于 2012-12-31T22:56:16.053 に答える