为什么我的变量在此方法中都消失了?

时间:2019-07-17 12:31:10

标签: java

我正在尝试使用CardController类创建一副纸牌。

Card类(看不见)代表单个卡,并带有构造函数'public Card(String cardValue,CardType cardType)'。

我的纸牌正确填写,直到我的deckIndexTracker达到10,这时代码移到switch语句以填写纸牌值Jack,Queen,King和Ace。

使用Eclipse的调试工具后,我发现该方法经过deckIndexTracker 9之后,我的每个变量都消失了。

public class CardController {
    public static Card[] makeDeck() {//2 to 10 + J,Q,K,A
        Card[] deck = new Card[51];
        int deckIndexTracker = 1;
        while(deckIndexTracker <= 13) {
            if(deckIndexTracker <= 9) {
            deck[deckIndexTracker - 1] = new Card(String.valueOf(deckIndexTracker + 1), CardType.HEART);
            deckIndexTracker++;             
            }else {
                switch(deckIndexTracker) {
                case 10:
                    deck[deckIndexTracker - 1] = new Card("Jack", CardType.HEART);
                    break;
                case 11:
                    deck[deckIndexTracker - 1] = new Card("Queen", CardType.HEART);
                    break;
                case 12:
                    deck[deckIndexTracker - 1] = new Card("King", CardType.HEART);
                    break;
                case 13:
                    deck[deckIndexTracker - 1] = new Card("Ace", CardType.HEART);
                }
            }
        }

5 个答案:

答案 0 :(得分:1)

您的while loop看起来像是一个无限循环,因为您在10之后不再增加deckIndexTracker的值。

您可以使代码更简单。只需使用开关:

int deckIndexTracker = 2; 
//start from 2, 
//because the case where value is equal with 9
//you add new Card("9 + 1",...) which should be "Jack" in my opinion.
//start from 2 -> add value of index in Card, but remove 2 at deck index.

while(deckIndexTracker <= 13) {

    switch(deckIndexTracker) {

        case 10:
            deck[deckIndexTracker - 2] = new Card("Jack", CardType.HEART);
            break;

        case 11:
            deck[deckIndexTracker - 2] = new Card("Queen", CardType.HEART);
            break;

        case 12:
            deck[deckIndexTracker - 2] = new Card("King", CardType.HEART);
            break;

        case 13:
            deck[deckIndexTracker - 2] = new Card("Ace", CardType.HEART);
            break;

        default:
            deck[deckIndexTracker - 2] = new Card(String.valueOf(deckIndexTracker), CardType.HEART);
            break;

    }

    deckIndexTracker++;

}

如果仅将deckIndexTracker用于代码的这一部分,则建议使用for loop

for(int deckIndexTracker = 2; deckIndexTracker <= 13; deckIndexTracker++){

    switch(deckIndexTracker){

        //same like in while

    }

}

答案 1 :(得分:0)

您需要在您的else语句的末尾添加deckIndexTracker++,以便它继续存在并且不会在Jack处停止。或者,您可以将其添加到while循环的末尾,然后删除if语句中的内容。

答案 2 :(得分:0)

您要在deckIndexTracker中增加if()的值,因此一旦控制权移至else部分,变量就不会增加。

添加

  

deckIndexTracker ++;

if-else循环中while之后。

答案 3 :(得分:0)

上述代码的问题是#deckIndexTracker ++;的位置。它在if块中。 直到deckIndexTracker = 9,它将正常运行。一旦deckIndexTracker = 10,它将进入其他块,并且deckIndexTracker的计数将不会增加,并且将保持为10。因此,它将变为无限循环。 解决方案:放置#deckIndexTracker ++;在if-else块之后

答案 4 :(得分:0)

我认为您会以错误的方式开始。构造卡组时,与其使用switch语句,不如在switch的构造函数中使用CardCard然后可以轻松地在构造函数中处理不同的情况,这将使您的代码更具可重用性。

Card类如下所示:

private String cardVal;
private CardType suit;

public Card(int value, CardType suit){

    switch(value)
    {
        case 1:
        case 14:
            this.cardVal = "Ace";
            break;
        case 11:
            this.cardVal = "Jack";
            break;
        case 12:
            this.cardVal = "Queen";
            break;
        case 13:
            this.cardVal = "King";
            break;
        default: //Default case that handles nonface cards
            this.cardVal = String.valueOf(value);
    }
    this.suit = suit;
}

然后看看您可以轻松地用每套西装建造整个牌组:

    ArrayList<Card> deck = new ArrayList<>();

    for (int deckIndexTracker = 2; deckIndexTracker <= 14; deckIndexTracker++)
    {
        deck.add(new Card(deckIndexTracker, CardType.HEART));
        deck.add(new Card(deckIndexTracker, CardType.CLUB));
        deck.add(new Card(deckIndexTracker, CardType.SPADE));
        deck.add(new Card(deckIndexTracker, CardType.DIAMOND));
    }

使用构造函数为您带来好处!我什至提出了Ace1都使用14的情况。