2012-04-30 4 views
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(); к переменной, но я не уверен, как это сделать и заставить код работать. Есть ли простой способ чтения в ответе пользователей, а затем отображение ответа пользователю?Java: использование сканера для чтения в булевых значениях.

Благодаря

+3

Это домашнее задание? – Bernard

ответ

6

Вашего условного выражения

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

звонков scanner.next() дважды, что означает, что второй вызов будет читать/ждать больше ввода. Вместо этого вам нужно вызвать его только один раз, сохранить результат и использовать его в сравнении:

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

'System.out.println ("Вы хотите играть?");' ' Сканер = новый сканер (System.in),' ' если (tmp.equalsIgnoreCase ("у") || TMP .equalsIgnoreCase ("yes")) {' \t' System.out.println («Это будет весело»); ' '} else (tmp.equalsIgnoreCase ("n") || tmp.equalsIgnoreCase ("no")) {' ' System.out.Println ("Может быть, в следующий раз"); '' } '' } '' } ' у меня есть это, но это не кажется правильным – Javaer

+0

, что кажется правильным. Конечно, вы всегда можете попробовать: – Attila

+0

В нем говорится, что оператор if не является выражением в сообщении об ошибке, он не компилируется. – Javaer

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

Это becauswe, с каждым вызовом scanner.next(), то Scanner возвращает следующее значение в потоке, а затем MOVES ПРОШЕДШИЕ IT

Если пользователь вошел «да », а затем« нет », испытания будут проводиться следующим образом:

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

Вам необходимо изменить th e way of 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"); 
    } 
} 
Смежные вопросы