Java卡类

时间:2015-06-05 02:13:52

标签: java

我刚开始在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;
}


}   

1 个答案:

答案 0 :(得分:1)

除了基本的事实,我认为有多种风格和设计问题。

  1. 套装和等级最有可能是Enum,而不是为性能和清晰度定义的静态String数组。问题是当其他类需要引用它们时,它们也只能引用为String数组;那么你对内容没有任何保护,即其他人可以轻易改变内容。

  2. 您的cardRank和cardSuite确实应该是final,因为他们在施工后不会发生变化。

  3. 您的随机化构造函数应该使用参数调用其他构造函数,而不是单独实现赋值。

  4. 您的方法命名有问题。 getXXX()通常意味着获取值,但您的方法签名为void。您应该返回该值,并让其他人决定如何处理它,即打印;如果您的方法非常打算打印该值,请将它们重命名为printXXX()