0
import java.util.Scanner;

public class Cardhelp2{

private static String[] pairArray={"A,A","K,K","Q,Q","J,J","10,10","9,9","8,8","7,7","6,6","5,5","4,4","3,3","2,2"};

public static void generateRandom(int k){
 int minimum = 0;
 int maximum = 13;
 for(int i = 1; i <= k; i++)
   {
     int randomNum = minimum + (int)(Math.random()* maximum);
     System.out.print("Player " + i +" , You have been dealt a pair of: ");
     System.out.println(pairArray[randomNum]);
   }
} //reads array and randomizes cards

 public static void main(String[] args) {
 Scanner scan = new Scanner(System.in);
 System.out.print("How many players would you like to play with? ");
 int m = scan.nextInt();
 generateRandom(m);

//displays the cards

___________________________________________________
System.out.println("Would you like to play?");
 Scanner scanner = new Scanner(System.in);

 if(scanner.next().equalsIgnoreCase("y")||scanner.next().equalsIgnoreCase("yes")) {
System.out.println("This will be fun");
} else if(scanner.next().equalsIgnoreCase("n")||scanner.next().equalsIgnoreCase("no")) {
System.out.println("Maybe next time");
} else { 
System.out.println("Invalid character");

 }
 }
}

最後の部分が機能しない理由を理解するのに苦労しています。scanner.next(); を変更する必要があると言われました。変数にですが、それを実行してコードを機能させる方法がわかりません。ユーザーの回答を読み込んで、ユーザーに回答を表示する簡単な方法はありますか?

ありがとう

4

3 に答える 3

6

あなたの条件式

if(scanner.next().equalsIgnoreCase("y")||scanner.next().equalsIgnoreCase("yes")) 

これは、2 回目の呼び出しscanner.next()がさらに入力を読み取り/待機することを意味します。代わりに、一度だけ呼び出して結果を保存し、それを比較で使用する必要があります。

String tmp = scanner.next();
if(tmp.equalsIgnoreCase("y")||tmp.equalsIgnoreCase("yes")) 
于 2012-04-30T18:16:59.000 に答える
1

ユーザーが「はい」と入力したとしましょう。

if(scanner.next().equalsIgnoreCase("y")||scanner.next().equalsIgnoreCase("yes")) {

Scanner.next()最初のテストで「はい」を生成します。したがって、コードは効果的に

"yes".equalsIgnoreCase("y")

これは誤りなので、次のテストに進みます。

scanner.next().equalsIgnoreCase("yes")

ここにあなたの問題があります。

入力された「はい」は、最初のテストですでに消費されています。これで、スキャナーのバッファーには何もありません。

同じ入力を再度テストする場合は、それをキャプチャして、テストで使用する必要があります。

それで

String userReply= Scanner.next();
if(userReply.equalsIgnoreCase("y")||userReply.equalsIgnoreCase("yes")) {...

これは、を呼び出すたびにscanner.next()Scannerがストリーム内の次の値を返し、それから過去に移動するためです。

ユーザーが「はい」を入力してから「いいえ」を入力した場合、テストは次のように実行されます。

if("yes".equalsIgnoreCase("y")||"no".equalsIgnoreCase("yes")) {...
于 2012-04-30T18:21:21.067 に答える
0

Scannerの呼び出し方法を変更する必要があります。

ユーザー入力\nScanner次のトークンが続かないようです。次に、行ごとに読む必要があります。:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("How many players would you like to play with? ");
    int m = Integer.parseInt(sc.nextLine()); // May thrown NumberFormatException
    generateRandom(m);

    //displays the cards

    System.out.print("Would you like to play? ");
    String input = sc.nextLine();

    if (input.equalsIgnoreCase("y") || input.equalsIgnoreCase("yes")) {
        System.out.println("This will be fun");
    } else if (input.equalsIgnoreCase("n") || input.equalsIgnoreCase("no")) {
        System.out.println("Maybe next time");
    } else {
        System.out.println("Invalid character");
    }
 }
于 2012-04-30T21:26:14.703 に答える