我刚开始在Oracle学习Java,我参加了这个练习:
“写一个实例代表一个扑克牌的类 一副牌。扑克牌有两个显着特征:排名 并且适合。“
这是解决问题的好方法吗?
import java.util.Arrays;
public class Card{
protected static final String[] Suits = {"spades", "clubs", "hearts", "diamonds"};
protected static final String[] Ranks = {"1","2","3","4","5","6","7","8","9","10","J","Q","K"};
private String cardRank;
private String cardSuit;
public Card(){
int randomRank = (int) (Math.random() * Ranks.length);
int randomSuit = (int) (Math.random() * Suits.length);
cardRank = Ranks[randomRank];
cardSuit = Suits[randomSuit];
}
public Card(String cardRank, String cardSuit){
cardRank = cardRank.toLowerCase();
cardSuit = cardSuit.toLowerCase();
if(Arrays.asList(Ranks).contains(cardRank)) this.cardRank = cardRank;
else this.cardRank = "Invalid Rank";
if(Arrays.asList(Suits).contains(cardSuit)) this.cardSuit = cardSuit;
else this.cardSuit = "Invalid Suit";
}
public void getCardRank(){
System.out.print(cardRank);
}
public void getCardSuit(){
System.out.print(cardSuit);
}
public void sayCard(){
getCardSuit();
System.out.print(" ");
getCardRank();
System.out.println("");
}
public void setCardRank(String cardRank){
if(Arrays.asList(Ranks).contains(cardRank)) this.cardRank = cardRank;
}
public void setCardSuit(String cardSuit){
if(Arrays.asList(Suits).contains(cardSuit)) this.cardSuit = cardSuit;
}
}
答案 0 :(得分:1)
除了基本的事实,我认为有多种风格和设计问题。
套装和等级最有可能是Enum
,而不是为性能和清晰度定义的静态String
数组。问题是当其他类需要引用它们时,它们也只能引用为String数组;那么你对内容没有任何保护,即其他人可以轻易改变内容。
您的cardRank和cardSuite确实应该是final
,因为他们在施工后不会发生变化。
您的随机化构造函数应该使用参数调用其他构造函数,而不是单独实现赋值。
您的方法命名有问题。 getXXX()
通常意味着获取值,但您的方法签名为void
。您应该返回该值,并让其他人决定如何处理它,即打印;如果您的方法非常打算打印该值,请将它们重命名为printXXX()
。