2013-07-25 52 views
0

我对Java编程非常陌生,我正在尝试制作一个扑克手评估器。我正在问一个卡的花色和价值,使用for循环。出于某种原因,它在for循环的第一次迭代中起作用,但在此之后只会询问我一个值。这是我的代码:为什么我的程序只让我在for循环的第一次迭代之后输入一个值?

import java.util.Scanner; 
public class PokerRun { 

public static void main(String[] args) { 

    int [] suit = new int[5]; 
    int [] value = new int[20]; 
    Card card1 = new Card(); 
    Scanner in = new Scanner(System.in); 
    int counter = 1; 
    System.out.println("Welcome to the Poker Hand Evaluator!"); 
    for(int i = 1; i<6; i++) 
    { 
     System.out.println("What is the suit of card " + i + "?\nPlease type the suit in all lowercase letters: "); 
     card1.suit = in.nextLine(); 
     System.out.println("What is the value of card " + i + "? (J = 11, Q = 12 K = 13, A = 14"); 
     card1.value = in.nextInt(); 
     //checks if face card, if true, then changes card.facecard 
     if(card1.value == 11) 
      card1.facecard = "Jack"; 
     else if(card1.value == 12) 
      card1.facecard = "Queen"; 
     else if(card1.value == 13) 
      card1.facecard = "King"; 
     else if(card1.value == 12) 
      card1.facecard = "Ace"; 

     if(card1.value<11) 
      System.out.println("You entered a " + card1.value + " of " + card1.suit + "."); 
     else 
      System.out.println("You entered a " + card1.facecard + " of " + card1.suit + "."); 
    } 

} 

} 
+0

显示命令行输入和输出。 – eebbesen

+0

请不要依赖用户给予预期的输入。让你的程序准备好用于奇怪的输入。就像用户可以通过''abc'',你正在读'int'。首先预先检查输入。 –

回答

2

Rohit Jain,是的,这正是这个问题。

我一个解决方案的建议是与交流线路

card1.value = in.nextInt();

card1.value= Integer.parseInt(in.nextLine());

这应该为你工作。

为了解释它更多的扫描仪建立了文件的字符串分析等。它不是很好的命令行输入。我会用一个BufferedReader:(输入新的行字符)

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
reader.readLine(); 
1

当你调用从扫描仪类下一个方法,如果没有输入可用,直到你按下回车键冻结程序然而,当解冻程序时,如果对下一个方法的调用没有使用所有的输入,它将继续运行任何未来的下一个命令,直到它耗尽。只有这样它才会再次等待输入命令。

在这种情况下,nextInt命令的输入与下一次迭代的nextLine命令重叠。

要告诉你我的意思了(因为这些都只是字) - >

比方说,你输入

钻石,然后按回车键。

这将输入到程序

'钻石\ N'

第一次调用in.nextLine();将吸收每一个字符,直到新行,所以card1.suit =“钻石”。

接下来假设您输入数字3,然后按确认键。

这将输入

'3 \ N'

到in.nextInt()的调用;将吸收每个字符直到数字结尾。但是它不会absorbe新的生产线,所以

card1.value将等于3

但是它仍然将不得不做一些与输入的其余部分“\ n”

所以当它到达循环的下一个迭代时,第二次调用in.nextLine()将吸收每个字符,直到'\ n',也就是说,空的空间。

所以现在card1.value =“”

为了解决这个问题,你可以调用in.nextInt(右后添加到in.nextLine(通话)),或者你可以做的Integer.parseInt( in.nextLine())。

相关问题