java - 为什么我的变量在这种方法中都消失了?
问题描述
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);
}
}
}
解决方案
你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
}
}
推荐阅读
- c# - 不正确的字符串值:第 1 行的列 'DisplayName' 的 '\xD8\xA7\xD9\x84\xD8\xB9...'
- mongodb - 如何使用golang在mongodb中使用$lookup获取计数值?
- r - 加入 sparklyr 后过滤错误
- angular - Angular 5 组件不显示子路由
- c# - 是否可以将数据集列复制到网格列中
- wpf - WPF Datagridrow 根据选定的组合框项目更改背景颜色和复选框值
- ruby-on-rails-4 - 我可以在 ruby on rails 中使用什么来代替 after_destroy?
- python - Python:将字典键与字符串进行比较
- 68000 - 68K 汇编数学公式
- html - 如何将密码点更改为星号