Java:使用scanner读取布尔值失败。

时间:2012-04-30 18:12:56

标签: java

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();变量,但我不知道如何做到这一点,并使代码工作。有没有一种简单的方法可以在用户回答中阅读然后向用户显示回复?

由于

3 个答案:

答案 0 :(得分:6)

您的条件表达式

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

两次调用scanner.next(),这意味着第二次调用将读取/等待更多输入。相反,您只需要调用一次,存储结果并在比较中使用它:

String tmp = scanner.next();
if(tmp.equalsIgnoreCase("y")||tmp.equalsIgnoreCase("yes")) 

答案 1 :(得分:1)

让我们假设用户输入“是”。

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

Scanner.next()在第一次测试中产生“是”。所以代码实际上是

"yes".equalsIgnoreCase("y")

哪个是假的,所以它会进入下一个测试:

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

以下是您的问题所在。

第一次测试已经消耗了输入的“是”。现在,扫描仪在缓冲区中没有任何内容。

如果要再次测试SAME输入,则必须捕获它,并在测试中使用它。

所以

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

这是因为,每次调用scanner.next()时,Scanner都会返回流中的下一个值,然后移动过去

如果用户输入“是”然后输入“否”,测试将按以下方式执行:

if("yes".equalsIgnoreCase("y")||"no".equalsIgnoreCase("yes")) {...

答案 2 :(得分: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");
    }
 }