我正在创建一个二十一点模拟器来更好地学习java。我最近完成了udacity的免费课程,这是一个很好的资源,https://www.udacity.com/course/cs046。
到目前为止,我已经创建了一副牌并成功打印出来。它由3个类别组成,Blackjack拥有主要方法,甲板创建甲板和卡片创建卡片。
有更好的方法吗?跳出来的一件事是甲板构造函数有多长。在我看到的所有例子中,构造函数都要短得多。
另外,我没有在卡中使用getter方法,因此应删除或使用它们。我倾向于删除它们,因为一旦创建了套牌,没有其他方法可以调用这些方法。
我没有使用Google搜索,因为我不想为将来的方法提供答案。我不是第一个有这个想法的人!
感谢您的反馈。
Card.java
package blackjack;
public class Card {
private final String name;
private final String suit;
private final int value;
public Card(String name, String suit, int value){
this.name = name;
this.suit = suit;
this.value = value;
}
public String getName(){
return name;
}
public String getSuit() {
return suit;
}
public int getValue() {
return value;
}
public String toString(){
return (this.name + " of " + this.suit + " " + this.value);
}
}
Deck.java
package blackjack;
import java.util.*;
public class Deck {
private static int numSuits = 4;
private static int numRanks = 13;
private static int numCards = numSuits * numRanks;
private Card[] cards;
public Deck() {
String suit = null;
String name = null;
int value = 0;
cards = new Card[numCards];
int arrayIndex=0;
for (int i=1; i<=numSuits; i++){
for (int j=1; j <= numRanks; j++){
switch (i){
case 1: suit = "Clubs"; break;
case 2: suit = "Diamonds"; break;
case 3: suit = "Hearts"; break;
case 4: suit = "Spades"; break;
}
switch (j){
case 1: name = "Ace"; value = 0; break;
case 2: name = "Two"; value = 2; break;
case 3: name = "Three"; value = 3; break;
case 4: name = "Four"; value =4; break;
case 5: name = "Five"; value = 5; break;
case 6: name = "Six"; value = 6; break;
case 7: name = "Seven"; value = 7; break;
case 8: name = "Eight"; value = 8; break;
case 9: name = "Nine"; value = 9; break;
case 10: name = "Ten"; value = 10; break;
case 11: name = "Jack"; value = 10; break;
case 12: name = "Queen"; value = 10; break;
case 13: name = "King"; value = 10; break;
}
Card card = new Card (name, suit, value);
cards[arrayIndex] = card;
arrayIndex++;
}
}
}
public void printDeck(){
System.out.println(Arrays.toString(cards));
}
}
Blackjack.java
package blackjack;
import java.util.*;
/**
*
* @author
*/
public class Blackjack {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Deck deck = new Deck();
deck.printDeck();
}
}
答案 0 :(得分:1)
有更好的方法吗?跳出来的一件事是甲板构造函数有多长。在我看到的所有例子中,构造函数都要短得多。
<强>答案:强>
你是对的,一般来说,构造函数应该是简约的。原因是,您希望尽快创建对象,并且当构造函数执行太多工作时,“不好的事情会发生”的可能性增加,然后您可能会得到一个“混乱”对象(这是当你发现它时,很难调试的东西......)。总而言之,您的构造函数有两个嵌套循环,每个循环运行52次并执行2个操作(+2比较)。那不是 很多工作 - 所以,恕我直言,这很好。
另外,我没有在卡中使用getter方法,因此应删除或使用它们。我倾向于删除它们,因为一旦创建了套牌,没有其他方法可以调用这些方法。
<强>答案:强>
没有!所有Card
的字段都是私有的,当您浏览Card[] cards
时(在课程Deck
中),您将无法访问它们以实际读取这些卡片。是的,将来......