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();变量,但我不知道如何做到这一点,并使代码工作。有没有一种简单的方法可以在用户回答中阅读然后向用户显示回复?
由于
答案 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
来电的方式。
用户输入\n
和Scanner
似乎没有跟随下一个标记。然后你需要逐行阅读。
:
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");
}
}