簡體   English   中英

Java:使用掃描儀讀取布爾值失敗。

[英]Java: Using scanner to read in boolean values failing.

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();。 到一個變量,但我不確定如何做到這一點並使代碼正常工作。 是否有一種簡單的方法可以讀取用戶答案,然后向用戶顯示回復?

謝謝

您的條件表達式

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

兩次調用scanner.next() ,這意味着第二個調用將讀取/等待更多輸入。 相反,您只需要調用一次,存儲結果並在比較中使用它:

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

假設用戶輸入“是”。

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")) {...

這是becauswe,每個調用scanner.next()時, Scanner將返回流中的下一個值,然后移動經過IT

如果用戶輸入的是“是”,然后輸入“否”,則將執行以下測試:

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

您需要更改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");
    }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM