【发布时间】:2014-11-12 09:41:31
【问题描述】:
我的代码在计算黑杰克游戏中手牌总数的整数时遇到问题。由于某种原因,for 循环第一次迭代了两次,这意味着它在增加 i 之前在循环中使用 i = 0 两次。它这样做是有原因的吗?我不知道要改什么。
private void setTotal(){
boolean ace = false;
for (int i = 0; i<hand.size(); i++){
if((hand.get(i).getValue()) == 1){
handTotal += 1;
ace = true;
}
else if((hand.get(i).getValue()) > 10){
handTotal += 10;
}
else {
handTotal += (hand.get(i).getValue());
}
}
if(ace == true && handTotal<12){
handTotal += 10;
}
}
下面是我用来检查的带有一堆打印语句的代码。
private void setTotal(){
boolean ace = false;
for (int i = 0; i<hand.size(); i++){
System.out.println("start " + i);
if((hand.get(i).getValue()) == 1){
handTotal += 1;
ace = true;
System.out.println("ace one");
}
else if((hand.get(i).getValue()) > 10){
handTotal += 10;
System.out.println("face card");
}
else {
handTotal += (hand.get(i).getValue());
System.out.println("num");
}
System.out.println("end " + i);
}
if(ace == true && handTotal<12){
handTotal += 10;
System.out.println("ace plus");
}
}
我主要运行这个
public class BlackJack {
public static void main(String[] args){
Deck deck = new Deck();
Dealer dealer = new Dealer();
deck.shuffle();
for(int i =0; i<2; i++){
dealer.dealCard(deck.draw());
}
System.out.println(dealer.getHand());
System.out.println(dealer.getHand().size());
System.out.println(dealer.getTotal());
}
}
例如,它打印了 开始 0 数 结束 0 开始 0 数 结束 0 开始 1 数 结束 1 [7个俱乐部,4个俱乐部] 2 18
【问题讨论】:
-
第一次迭代时你在 hand.size() 中得到了哪个值?
-
你确定它用 i = 1 迭代两次吗?或者你的手总数增加了两倍?
-
不,你的循环没问题。最可能的问题是您在进入循环之前没有将
handTotal设置为 0。 -
请解释是什么让您认为代码不起作用,并显示调用代码。目前,我们都只是猜测可能是什么问题,但没有具体的工作。
-
SJuan76 / Jason 的想法是对的。 handTotal 持有从 1 手牌计算的旧值,然后从 2 手牌的新值递增