我正在尝试使用 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/