2013-02-26 28 views
3

我遵循官方的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也誰能告訴我,爲什麼在甲板構造數組值被減?因爲初值是不會這樣正義事業,錯誤?。謝謝。

+2

Java數組從0開始。而且,這兩個環是不一樣的。在一個公平的邊緣... – ppeterka 2013-02-26 19:22:44

+0

嘗試刪除,你會得到一個漂亮的ArrayIndexOutOfBound異常。通過編碼學習不會通過學習進行編碼。好運。 – 2013-02-26 19:26:03

+0

他們有什麼不同?他們都增加排名和訴訟。對不起,如果這是一個愚蠢的問題,即時通訊仍然是非常新的Java。 – 2013-02-26 19:26:44

回答

4

的循環重複兩次,因爲他們的身體是不同的:

  • Deck()構造內部的循環初始化卡
  • main循環打印卡。

這兩種方法以相同的順序執行,這就是爲什麼循環的標題是相同的。

的號碼被通過一個因爲在Java(以及在C,C++,C#,以及許多其他語言)調整陣列索引從零計數,而不是從一個被編號。另一方面,卡片程序中的常量是基於一個的,所以你必須從它們中減去一個以使數字與數組索引的方式保持一致。

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())); 
     } 
    } 

迭代中相同的方式與第一。適合外循環和內循環的值。但是這一次,它實際上並不是在構建套牌,而是在打印套牌中的結果。在這兩種情況下

+0

它爲什麼迭代?因爲卡已經建成了,你不應該只能打印它的值? – 2013-02-26 19:35:25

+0

@IntentFilters怎麼樣?即使你公開'cards'矩陣,你仍然需要遍歷兩個軸。 – 2013-02-26 19:37:25

+0

使用我猜的方法?,讓我去看看,如果這是可能的。 – 2013-02-26 19:38:38

0

,原因是因爲你有一個二維數組。外陣是西裝,內陣是隊伍。使用數組,你必須使用不同的計數變量來通過它們。例如,您希望外部循環運行4次,但您希望內部循環運行13次。

相關問題