- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Eclipse 中编写一个黑 jack 程序,但当该程序处理 Ace 时遇到问题。我询问用户是否希望 A 值 1 或 11。确实如此,但当我输入值时,它会给出错误消息
"Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at PlayBlackJack.main(PlayBlackJack.java:72)"
有人可以帮忙吗?我有一个单独的类,如果生成的随机卡是 ace,则返回值 11。这是代码的一部分
更新:它将 Ace 的值添加到用户的总值中。但在发完 A 并用户选择一个值后,无论总数是多少,它都会停止用户的回合并转到庄家。我该如何纠正这个问题?我遇到的另一个问题是,在用户对想要另一张卡说“不”之后,它会转到经销商并且工作正常,但是当询问用户是否想再次玩时,它会进入无限循环并开始抛出出随机卡。我该如何纠正这个问题?
import java.util.Scanner;
公共(public)类 PlayBlackJack {
public final static int MAXCARDS=52;
//declaring the constant maxcards to be 52
//since there are 52 cards in the deck
public static void main(String[] args) {
Scanner kbd=new Scanner (System.in);
String printRules;
//check to see if the user wants to see the rules or not
String more;
//variable used to see if the user would like to play the game
String next;
//variable used to see if the user would like another card
int dealerTotal, userTotal;
//keeps track of the user's total and the dealer's total
int wins=0, losses=0;
//variables used to keep track of the user's wins and losses
int card = 0;
System.out.println(" Welcome to Black Jack!");
System.out.println("Would you like to see the rules? Type yes or no");
//If yes, rules printed, if no, rules not printed
printRules=kbd.nextLine();
printRules=printRules.toUpperCase();
if (printRules.charAt(0)=='Y')
{
(print rules)
System.out.println("Now lets play!\n\n\n");
}
System.out.println("Would you like to play a game of Black Jack?");
more=kbd.nextLine();
more=more.toUpperCase();
next="Yes";
while (!more.isEmpty() && more.charAt(0)=='Y')
{
System.out.println("The game begins with this your first card:");
userTotal=0;
dealerTotal=0;
while (!next.isEmpty() && next.charAt(0)=='Y')
{
card=PickACard.findCardValue();
if (card==11)
{
System.out.println("Would you like the Ace to be a 1 or 11?");
int aceValue=kbd.nextInt();
while (aceValue!=1 && aceValue!=11)
{
System.out.println("You did not enter a 1 or 11");
aceValue=kbd.nextInt();
}
card=aceValue;
}
userTotal=userTotal+card;
System.out.println("You're total is " +userTotal);
if (userTotal>21)
{
System.out.println("Sorry, You lose");
losses++;
System.out.println("Would you like to play again?");
next="No";
more=kbd.nextLine();
more=more.toUpperCase();
}
else
{
System.out.println("Would you like another card?");
next=kbd.nextLine();
next=next.toUpperCase();
}
}
while (dealerTotal<=userTotal && userTotal<21)
{
System.out.println("Now it's the dealer's turn");
int card1=0;
card1=PickACard.findCardValue();
if (card1==11)
{
int aceValue1;
if (dealerTotal+11>21)
{
aceValue1=1;
}
else
{
aceValue1=11;
}
card1=aceValue1;
}
dealerTotal=dealerTotal+card1;
System.out.println("The dealer's total is "+dealerTotal);
if (dealerTotal==userTotal && userTotal<21)
{
losses++;
System.out.println("Sorry, you lose. Would you like to play again?");
more=kbd.nextLine();
more=more.toUpperCase();
}
if (dealerTotal>21)
{
wins++;
System.out.println("You Win! Would you like to play again?");
more=kbd.nextLine();
more=more.toUpperCase();
}
/*else
{
losses++;
System.out.println("You lose. Would you like to play again?");
more=kbd.nextLine();
more=more.toUpperCase();
}*/
}
}
System.out.println("You won "+wins+" game(s) and lost "+losses+" game(s)");
kbd.close();
}
}
最佳答案
我认为因为您使用 kbd.nextInt()
来获取 Ace 值,所以缓冲区中会留下一个新行字符,因此当循环进行时 kbd.nextLine ()
返回新行字符,而不是可能导致 more.charAt(0)
出现问题的 Y,您可能需要添加额外的 kbd.nextLine();
删除换行符。另外,正如 Elliot Frisch 指出的那样,您应该检查 while 控制语句中的字符串是否为空。
while(!more.isEmpty() && more.charAt(0) == 'y')
{
}
我猜 next.charAt(0)
显示了错误。您可以尝试在询问您是否想要另一个游戏之前执行 kbd.nextLine();
并检查 next 是否不为空。
while(!next.isEmpty() && more.charAt(0) == 'y')
{
}
试试这个
System.out.println("Sorry, You lose");
losses++;
System.out.println("Would you like to play again?");
next="No";
kbd.nextLine(); // to flush out new line character
more=kbd.nextLine();
more=more.toUpperCase();
您还可以使用 nextLine() 并将其解析为 int,这样可以避免换行符问题。
aceValue = Integer.parseInt(kbd.nextLine());
关于java - java 黑 jack ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33908924/
我正在尝试在 Eclipse 中编写一个黑 jack 程序,但当该程序处理 Ace 时遇到问题。我询问用户是否希望 A 值 1 或 11。确实如此,但当我输入值时,它会给出错误消息 "Exceptio
我在黑 jack 游戏中需要帮助。我在数组中有一副牌,每次我取出一张牌并处理它时,数组都会被重新分配为小于大小的一个。所以我有这个循环,向每个第 n 个玩家发两张牌 deck=crea
我正在尝试检测黑点或其中有黑点的圆圈(我在下图中用箭头指向的圆圈)。 我目前的方法是在 OpenCV 中使用 HoughCircles 函数来检测半径大于 2 像素的圆。我对社区的问题是:假设我检测到
我正在用 python 编写一个非常基本的轮盘模拟器。目前,我只专注于红/黑投注(基本上与投注正面或反面相同,使用硬币)。 我的代码有各种问题。请原谅我对语言的基本了解。 import random
目前,我正在尝试使用 javascript 制作黑 jack 游戏。 到目前为止,我有庄家牌和闲家牌。当玩家决定再拿一张牌时就会出现问题。似乎 document.write 在将字符串写入网页时迟到了
b/w PRLock 和 PRRWLock 有什么区别由 nspr 库提供? 最佳答案 我对这个库一无所知,但从名字可以看出,一个是标准锁,另一个是读写器锁。第一个总是提供独占访问,第二个允许多个并发
如何使用 ios5 将 RGB 图像转换为 1 channel 图像(黑/白)? 输入图像通常是书页的照片。 目标是通过将复印件转换为 1 channel 图像来减小复印件的大小。 最佳答案 如果我理
我是一名优秀的程序员,十分优秀!