繁体   English   中英

为什么同一个循环使用了两次&为什么数组的值减少了?

[英]Why is the same loop used twice & Why is the value of of a array decreased?

我正在关注官方java教程,我想知道为什么for循环在两个类中重复。

public class Deck {

    public static int numSuits = 4;
    public static int numRanks = 13;
    public static int numCards = numSuits * numRanks;

    private Card[][] cards;

    public Deck() {
        cards = new Card[numSuits][numRanks];
        for (int suit = Card.DIAMONDS; suit <= Card.SPADES; suit++) {
            for (int rank = Card.ACE; rank <= Card.KING; rank++) {
                //Don't understand why rank is decreased by one
                cards[suit-1][rank-1] = new Card(rank, suit);
            }
        }
    }

    public Card getCard(int suit, int rank) {
        return cards[suit-1][rank-1];
    }
}


      public class DisplayDeck {
    public static void main(String[] args) {
        Deck deck = new Deck();
        for (int suit = Card.DIAMONDS; suit <= Card.SPADES; suit++) {
            for (int rank = Card.ACE; rank <= Card.KING; rank++) {
                Card card = deck.getCard(suit, rank);
                System.out.format("%s of %s%n",
                    card.rankToString(card.getRank()),
                    card.suitToString(card.getSuit()));
            }
        }
    }
}

还可以在这里找到卡类的代码也可以告诉我为什么卡组构造函数中的数组值减少了一个?,因为初始值是一个不会这只是导致和错误? 谢谢。

循环重复两次,因为它们的主体不同:

  • Deck()构造函数中的循环初始化卡片
  • main内部的循环打印卡片。

这两种方法以相同的顺序执行,这就是循环的标题相同的原因。

数字由一个调整,因为在Java(以及C,C ++,C#和许多其他语言)中,数组索引从零开始编号,而不是从一开始编号。 另一方面,卡程序中的常量是基于一的,因此必须从中减去一个以使数字与数组索引的方式一致。

我不知道你在说什么循环,但我会解决我能做的事情。

第一个循环组

    for (int suit = Card.DIAMONDS; suit <= Card.SPADES; suit++) {
        for (int rank = Card.ACE; rank <= Card.KING; rank++) {
            //Don't understand why rank is decreased by one
            cards[suit-1][rank-1] = new Card(rank, suit);
        }
    }

建造甲板。 外部循环迭代套装,内部循环迭代值。 结果是完整的52张牌。 每件衣服13个价值。


第二个循环组:

    for (int suit = Card.DIAMONDS; suit <= Card.SPADES; suit++) {
        for (int rank = Card.ACE; rank <= Card.KING; rank++) {
            Card card = deck.getCard(suit, rank);
            System.out.format("%s of %s%n",
                card.rankToString(card.getRank()),
                card.suitToString(card.getSuit()));
        }
    }

以与第一种相同的方式迭代。 适合外循环和内循环中的值。 但这一次,它实际上并没有构建甲板,相反,它正在打印甲板上的结果。

在这两种情况下,原因都是因为你有一个二维数组。 外部数组是套装,内部数组是等级。 使用数组,您必须使用不同的计数变量来完成它们。 例如,您希望外循环运行4次,但您希望内循环运行13次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM