2

これを読んでくれてありがとう。私は、Javaを使用してブラックジャックの単純で一般的なバージョンを作成しています。「ヒットまたはパス」と表示され、パスを入力する場合を除いて、他のすべては完全に正常に機能します。パスを再確認するには、2回入力する必要がありますが、その理由がわかりません。読みやすくするためのpastebinのコードは次のとおりです:http://pastebin.com/GF7Rzusx

ペーストビンからの関連コード:

  public void ask()
    {
        System.out.println("Hit or Pass?");
        if (in.next().equalsIgnoreCase("Hit"))
        {
            hit();
        }
        if (in.next().equalsIgnoreCase("Pass"))
        {
            pass();
        }
    }
4

4 に答える 4

5

入力された単語が"Pass"標準入力から読み取られて失われた場合、その単語は保存されません。後続のチェックで再び使用できるようにするには、保存する必要があります。

String input = in.next();

if (input.equalsIgnoreCase("Hit"))
{
    hit();
}
else if (input.equalsIgnoreCase("Pass"))
{
    pass();
}
于 2012-07-16T22:00:49.453 に答える
4

きっとあなたは欲しい:

public void ask()
{
    System.out.println("Hit or Pass?");
    String answer = in.next();
    if (answer.equalsIgnoreCase("Hit"))
    {
        hit();
    } else if (answer.equalsIgnoreCase("Pass"))
    {
        pass();
    }
}

呼び出すたびにin.next()、前の入力が破棄され、別のトークン(入力)が必要になります。

次のような場合に何が起こるか想像してみてください。

System.out.println(in.next());
System.out.println(in.next());

入力として何を期待し、何を出力しますか?

コードの主な違い

新しいコードには2つの違いがあることに注意してください。

  1. 呼び出すのin.next()は1回だけなので、必要な入力は1つだけで、これはとして保存されanswerます。
  2. 答えが「合格」であるかどうかを確認するのは、それがまだ「ヒット」でなかった場合のみです。

JavaScanner.nextのドキュメントを参照してください。

于 2012-07-16T22:00:40.730 に答える
3

行112で、次のことを行います。

in.next()

これにより、1つの文字列トークンが読み取られます。したがって、passと書くと、この関数は「pass」を返します。

問題は、この値を保存しないことです。代わりに、行116でin.next()を再度実行します。これにより、パスをもう一度書き込む必要があります。

代わりに、112行目のin.next()から返された文字列を保存します。

于 2012-07-16T22:01:38.867 に答える
1

これは、ask()メソッドの構造が原因です。2つのifステートメントがあるため、応答が「ヒット」かどうかをチェックするときにin.next()が1回呼び出され、「パス」をチェックするときに2回目に呼び出されます。「pass」と入力すると、最初のifステートメントがnext()を呼び出し、「pass」を返し、それが「hit」と等しいかどうかを確認してから、次に進みます。次に、2番目のifステートメントがnext()を呼び出すと、返す次のエントリがないため、「pass」をもう一度入力する必要があります。これは、「ヒット」と入力すると機能しますが、これが最初にチェックされるケースであるためです。

リファクタリングなので、next()を1回だけ呼び出すと、問題が解決するはずです。

于 2012-07-16T22:13:18.720 に答える