Java for循环错误,第一项重复

时间:2014-11-12 01:16:17

标签: java loops for-loop

我的代码存在问题,在Black Jack游戏中计算手总数的整数。由于某种原因,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开始 NUM 结束0 从0开始 NUM 结束0 开始1 NUM 结束1 [7个俱乐部,4个俱乐部] 2 18

1 个答案:

答案 0 :(得分:2)

我希望for-each循环实现setTotal(并且不要忘记将handTotal重置为零),如

private void setTotal() {
    handTotal = 0;
    boolean ace = false;
    for (Card c : hand) {
        int value = c.getValue();
        if (value == 1) {
            ace = true;
        }
        handTotal += (value > 10) ? 10 : value;
    }
    if (ace && handTotal < 12) {
        handTotal += 10;
    }
}