【问题标题】:Java for loop error, first item repeatingJava for循环错误,第一项重复
【发布时间】: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 手牌的新值递增

标签: java loops for-loop


【解决方案1】:

我更喜欢 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;
    }
}

【讨论】:

  • 抱歉,这是我第一次学习 Java,所以你能解释一下这行 handTotal += (value > 10) 吗? 10:价值;
  • @Julia 这是ternary operator。如果 value > 10,则使用 10。否则使用 value。
  • 我很困惑。我在她的代码中根本没有看到continue 语句。
  • 谢谢,将 handTotal 初始化为 0 解决了这个问题,我可能会尝试一个 for-each 循环,尽管这似乎已经解决了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
相关资源
最近更新 更多