簡體   English   中英

在通過方法調用創建的數組中打印位置0

[英]Printing Position 0 in array that has been created through method calls

我正在嘗試使用兩個單獨的類來創建卡片組,這兩個類將調用createCard方法,並將此卡片返回並將其附加到我的DeckOfCards類中的數組中。 就我正在學習的數組而言,這似乎是一次冒險。 截至目前,我當前的問題是試圖找出為什么當我請求打印附錄0時收到錯誤的卡位置。 因此,如果我輸入2 NumberOfRanks和2 NumberOfSuits並嘗試打印出位置0,我將收到第二個位置。 如果嘗試使用3&3打印,我將獲得第三名。

抱歉,該文本塊。

有什么想法嗎?

public class DeckofCards {
    private int NumberOfRanks;
    private int NumberOfSuits;
    private int SizeOfDeck;
    private int whatSuit;

    public void DeckofCards ( int NumberOfRanks, int NumberOfSuits ) {
        this.NumberOfRanks = NumberOfRanks;
        this.NumberOfSuits = NumberOfSuits;

        SizeOfDeck = NumberOfRanks * NumberOfSuits;

        Cards newCard = new Cards();

        newCard.setCards ( NumberOfRanks, NumberOfSuits );

        String[] newDeck = new String [ SizeOfDeck ];
        int counter;
        for ( counter=0; counter <= NumberOfRanks; counter++ ) {

        for ( whatSuit = 1; whatSuit <= NumberOfSuits; whatSuit++ ){
            newCard.createCard ( counter, whatSuit );
            newDeck[counter] = newCard.createCard ( counter, whatSuit );
            System.out.println ( newDeck[ counter ] );
        }

    }
   System.out.println ( newDeck [0] );
}


public String createCard( int newCard, int whatSuit ) {


    createCard = newCard;
    theNumber = Integer.toString(createCard + 1);
    theSuit = Integer.toString ( whatSuit );

    theCard = ( "S" + theSuit + "R" + theNumber );

    return theCard;

}



Output:

How many suits? 2
How many ranks? 2 
S1R1
S2R1
S1R2
S2R2
S1R3
S2R3
S2R1 //Attempt to print position 0

Output:
How many suits? 3
How many ranks? 2
S1R1
S2R1
S3R1
S1R2
S2R2
S3R2
S1R3
S2R3
S3R3
S3R1 //Attempt to print position 0

問題是您不是在每次添加卡時都不增加counter ,而是在每個完整的內循環中只增加一次。 通過重復使用相同的索引,您將覆蓋數組中的值。

更改外部循環以遍歷rank並使用類似以下內容:

int counter = 0;
for (int rank = 1; rank <= NumberOfRanks; rank++) {
    for (whatSuit = 1; whatSuit <= NumberOfSuits; whatSuit++) {
        newDeck[counter++] = newCard.createCard(rank, whatSuit);
        System.out.println(newDeck[counter - 1]);
    }
} 

最佳做法是最小化變量的范圍,因此將whatSuit刪除為實例字段並使其成為循環變量,即for (int whatSuit; ...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM