我正在关注官方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()));
}
}
}
}
也可以找到卡类的代码here也可以有人告诉我为什么deck构造函数中的数组值减少了一个?,因为初始值是一个不会这只是原因和错误?。感谢。
答案 0 :(得分:4)
循环重复两次,因为它们的主体不同:
Deck()
构造函数中的循环初始化卡main
内的循环打印卡片。这两种方法的顺序相同,这就是循环标题相同的原因。
数字由一个调整,因为在Java(以及C,C ++,C#和许多其他语言)中,数组索引从零开始编号,而不是从一开始编号。另一方面,卡片程序中的常量是基于一的,所以你必须从它们中减去一个,以使数字与数组的索引方式一致。
答案 1 :(得分:1)
我不知道你在谈论什么循环,但我会解决我能做的事情。
第一个循环组
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()));
}
}
以与第一种相同的方式迭代。适合外循环和内循环中的值。但是这一次,它实际上并没有构建套牌,而是打印了套牌中的内容。
答案 2 :(得分:0)
在这两种情况下,原因都是因为你有一个二维数组。外部数组是套装,内部数组是等级。使用数组,您必须使用不同的计数变量来完成它们。例如,您希望外循环运行4次,但您希望内循环运行13次。