我正在尝试使用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);
}
}
}
答案 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
的构造函数中使用Card
。 Card
然后可以轻松地在构造函数中处理不同的情况,这将使您的代码更具可重用性。
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));
}
使用构造函数为您带来好处!我什至提出了Ace
和1
都使用14
的情况。