首页 > 解决方案 > 为什么我的变量在这种方法中都消失了?

问题描述

CardController我正在尝试与班级一起创建一副纸牌。

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

我的纸牌被正确填写,直到deckIndexTracker点击 10,此时代码移动到 switch 语句以填写卡片值

杰克、皇后、国王和王牌。

使用 Eclipse 的调试工具后,我发现在方法超过 9 后,我的每一个变量都消失了deckIndexTracker

这里会发生什么?

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

标签: java

解决方案


while loop看起来像是一个无限循环,因为你deckIndexTracker在 10 之后停止增加值。

你可以让你的代码更简单。仅使用开关:

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

    }

}

推荐阅读