java - 为什么我的变量在这个方法中全部消失了?

标签 java

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

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

我的牌组已正确填写,直到我的 deckIndexTracker 达到 10,此时代码将移至 switch 语句以填写牌值

Jack, Queen, King and 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);
                }
            }
        }

最佳答案

您的 while 循环 看起来像是一个无限循环,因为您在 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循环:

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

    switch(deckIndexTracker){

        //same like in while

    }

}

关于java - 为什么我的变量在这个方法中全部消失了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57075917/

相关文章:

java - 按时间和权重对记录进行排序

java - Android setOnClickListener(this) 错误

java - 如何在java中使用UnboundID LDAP SDK从Active Directory获取解码的objectGUID?

java - 用于 I/O 超时的最佳异常类型是什么?

java - DB 机器 CPU 周期与中端机器 CPU 周期

java - Android 版 OpenGL ES 2.0 中的纹理

java - Android Studio 签名 APK - 缺少强制 list 版本属性

java - 并发方法

java - 从 JSON moxy 输出重命名 "type"

java - 如何查明网页中任何元素的基础页面代码?