Java 我理解这个练习了吗';您的需求是否正确?
这是《Java艺术与科学》第6章中的编程练习 实现一个名为Card的新类,该类包括以下条目: •四套西装的命名常量(梅花、钻石、红桃、黑桃) 以及传统上用文字表示的四个等级(ACE, 杰克,王后,国王)。秩常数的值应为1,11, 分别为12和13 •一个建造师,接受等级和西装,并返回一张带有 这些价值观 •名为getRank和getSuit的Getter方法用于检索等级和西装 卡片的组成部分 •toString方法的实现,返回完整的 卡的名称如练习1所示。请记住,您可以使用+ 运算符将字符串的不同部分连接在一起,如 如图中Rational类的toString实现所示 6-9 我的代码:Java 我理解这个练习了吗';您的需求是否正确?,java,Java,这是《Java艺术与科学》第6章中的编程练习 实现一个名为Card的新类,该类包括以下条目: •四套西装的命名常量(梅花、钻石、红桃、黑桃) 以及传统上用文字表示的四个等级(ACE, 杰克,王后,国王)。秩常数的值应为1,11, 分别为12和13 •一个建造师,接受等级和西装,并返回一张带有 这些价值观 •名为getRank和getSuit的Getter方法用于检索等级和西装 卡片的组成部分 •toString方法的实现,返回完整的 卡的名称如练习1所示。请记住,您可以使用+ 运算符将字符串的不
/*
* File: Card.java
*
*/
public class Card {
/* Named Constants for ranks*/
public static final int ACE = 1;
public static final int JACK = 11;
public static final int QUEEN = 12;
public static final int KING = 13;
/* Named Constants for suits*/
public static final int CLUBS = 1;
public static final int DIAMONDS = 2;
public static final int HEARTS = 3;
public static final int SPADES = 4;
public Card(int rank, int suit) {
cardRank = rank;
cardSuit = suit;
}
public int getRank() {
return cardRank;
}
public int getSuit() {
return cardSuit;
}
public String toString() {
return (toRankName() + " of " + toSuitName());
}
private String toRankName() {
switch (cardRank) {
case 1:
return ("Ace");
case 11:
return ("Jack");
case 12:
return ("Queen");
case 13:
return ("King");
default:
return ("" + cardRank);
}
}
private String toSuitName() {
switch (cardSuit) {
case 1:
return ("Clubs");
case 2:
return ("Diamonds");
case 3:
return ("Hearts");
case 4:
return ("Spades");
default:
return ("Invalid");
}
}
private int cardRank;
private int cardSuit;
}
我不确定的部分是“名为getRank和getSuit的Getter方法,用于检索卡的rank和suit组件。”
问题是要我返回int值还是字符串值(名称)
这是我第一次实现类。除了缺少JavaDoc注释外,我的代码还有什么问题吗
编辑:
非常感谢所有回复的人强>
问题是要我返回int值还是字符串值(名称)
您所引用的解释并不是关于套装常量类型的具体说明,因此对我来说int
是可以的。和getter按约定返回相应字段的类型
我的代码还有什么问题吗
我看不出有什么明显的错误,尽管有一些地方可以改进(但我想大部分都是在本书后面的章节中,所以请在那之前跳过这些):
- 将
转换为cardRank
最好使用String
,而不是String.valueOf(cardRank)
“”+cardRank
- 由于您不希望卡片更改其等级或套装,您可以声明字段
和cardRank
cardSuit
,以强制执行此操作final
- 在处理
和toRankName
中意外的等级和等级值时,您应该保持一致-查找具有未知等级或等级的汽车是否错误?如果是这样,您应该抛出一个字符串,而不是返回另一个字符串toSuitName
- 理想情况下,具有一组闭合的可能值的此类类型将使用一个或多个实现。这将使您的
语句变得不必要,并保证不会发生意外的诉讼或等级开关
int
是可以的。和getter按约定返回相应字段的类型
我的代码还有什么问题吗
我看不出有什么明显的错误,尽管有一些地方可以改进(但我想大部分都是在本书后面的章节中,所以请在那之前跳过这些):
- 将
转换为cardRank
最好使用String
,而不是String.valueOf(cardRank)
“”+cardRank
- 由于您不希望卡片更改其等级或套装,您可以声明字段
和cardRank
cardSuit
,以强制执行此操作final
- 在处理
和toRankName
中意外的等级和等级值时,您应该保持一致-查找具有未知等级或等级的汽车是否错误?如果是这样,您应该抛出一个字符串,而不是返回另一个字符串toSuitName
- 理想情况下,具有一组闭合的可能值的此类类型将使用一个或多个实现。这将使您的
语句变得不必要,并保证不会发生意外的诉讼或等级开关
public enum Suit
{
CLUB("Club"), DIAMOND("Diamond"), HEART("Heart"), SPADE("Spade");
String name;
Suit(String name)
{
this.name=name;
}
@Override
public String toString()
{
return name;
}
}
public enum Rank
{
ACE("Ace", 1), JACK("Jack", 11), QUEEN("Queen", 12), KING("King", 13); //add other cards
int value;
String name;
Rank(String name, int value)
{
this.name=name;
this.value=value;
}
@Override
public String toString()
{
return name;
}
}
public class Card {
public Card(Rank rank, Suit suit) {
cardRank = rank;
cardSuit = suit;
}
public Rank getRank() {
return cardRank;
}
public Suit getSuit() {
return cardSuit;
}
@Override
public String toString() {
return (cardRank + " of " + cardSuit);
}
private Rank cardRank;
private Suit cardSuit;
}
我想你实现了它,就像你应该做的那样 我看不出代码有任何错误,除了我不是命名常量的粉丝,我会使用枚举实现它,但因为这是一个要求 Edit:既然在构造函数中将rank和suite的值作为int值传递,那么在getter方法中也应该像这样返回它们。调用代码应该使用这些方法和命名常量来实现逻辑,而不是在这里使用字符串值 正如aix指出的,您应该在自己的代码中执行相同的操作(使用contant名称而不是幻数) 编辑:要使用枚举实现此功能,我将按如下方式执行:
public enum Suit
{
CLUB("Club"), DIAMOND("Diamond"), HEART("Heart"), SPADE("Spade");
String name;
Suit(String name)
{
this.name=name;
}
@Override
public String toString()
{
return name;
}
}
public enum Rank
{
ACE("Ace", 1), JACK("Jack", 11), QUEEN("Queen", 12), KING("King", 13); //add other cards
int value;
String name;
Rank(String name, int value)
{
this.name=name;
this.value=value;
}
@Override
public String toString()
{
return name;
}
}
public class Card {
public Card(Rank rank, Suit suit) {
cardRank = rank;
cardSuit = suit;
}
public Rank getRank() {
return cardRank;
}
public Suit getSuit() {
return cardSuit;
}
@Override
public String toString() {
return (cardRank + " of " + cardSuit);
}
private Rank cardRank;
private Suit cardSuit;
}
就需求而言,您的代码看起来非常合适 我唯一的建议是在两个
switch
语句中使用命名常量:
private String toRankName() {
switch (cardRank) {
case ACE:
return ("Ace");
case JACK:
return ("Jack");
...
这些要求似乎有点奇怪,因为它们迫使您在需要时使用命名常量