Java的艺术与科学是一本使用ACM库的教程,它的练习如下:
实现一个名为Card的新类,其中包括以下条目:·命名常量,用于四套西装(球杆、钻石、红桃、黑桃)和传统上以单词表示的四个级别(ACE、JACK、QUEEN、KING)。秩常数的值应分别为1、11、12和13。·一个构造函数,该构造函数采用等级和服装,并返回带有这些值的卡片。·访问器方法getRank和getSuit检索卡的级别和匹配组件。·返回卡片全名的toString方法的实现。
现在,这个问题有点难理解,但是我做了一个我认为答案是这样的课程:
/** Ficheiro: Carta.java
*
* Classe que vai representar os diferentes valores e naipes de uma carta de um baralho normal
* de 52 cartas. Exercício para construir uma classe completa juntamente com construtores,
* gets de Valores e Naipes e de método toString. */
public class Carta {
// Constantes do Naipe (Rank) das Cartas
public static final String AS = "Ás";
public static final String REI = "Rei";
public static final String DAMA = "Dama";
public static final String VALETE = "Valete";
// Constantes do Valor Facial (Suit) das Cartas
public static final String COPAS = "Copas";
public static final String PAUS = "Paus";
public static final String OUROS = "Ouros";
public static final String ESPADAS = "Espadas";
/**
* Cria uma nova carta de um baralho regular de 52 cartas.
* @param valor O valor facial da carta (ex. Ás, Rei, 10...)
* @param naipe O naipe da carta
*/
public Carta (int valor, int naipe) {
valorCarta = valor;
numNaipe = naipe;
}
/**
* Obtém o valor facial da carta (existem 13 valores faciais)
* @return O valor facial da carta em String
*/
public String getValorCarta() {
switch (valorCarta) {
case 1: return AS;
case 11: return REI;
case 12: return DAMA;
case 13: return VALETE;
default: return "" + valorCarta;
}
}
/**
* Obtém o naipe da carta (existem 4 naipes)
* @return O naipe da carta em String
*/
public String getNaipeCarta () {
switch (numNaipe) {
case 1: return COPAS;
case 2: return PAUS;
case 3: return OUROS;
case 4: return ESPADAS;
default: return ("Naipe Inválido");
}
}
/**
* Cria uma representação em String da Carta (Valor e Naipe)
* @return Representação em String da Carta (Valor e Naipe)
*/
public String toString () {
return getValorCarta() + " de " + getNaipeCarta();
}
// variáveis de instância que registam o Valor e o Naipe da Carta em integers.
private int valorCarta;
private int numNaipe;
}对评论很抱歉。我说葡萄牙语,我用葡萄牙语写了评论。我希望代码足够容易理解。
我想知道根据规范,尤其是公共常量和Get方法,我是否写得很好。
我不确定他们是否想让我做常数int类型而不是Strings,我也没有为Get方法指定任何参数,所以他们只会给我一个新的Card对象的级别或套装。我不确定他们是否希望我将int param归因于这些方法。
作为一个侧面,我编写了一个简短的程序,演示了这个类在选择和显示随机卡方面的作用(注意,run方法是acm库中的主要方法):
import acm.program.*;
import acm.util.*;
public class testeCarta extends ConsoleProgram{
// Escolhe uma carta aleatóriade um baralho de 52 cartas e imprime no ecrã
public void run () {
println ("Este programa vai seleccionar uma carta aleatória");
Carta cartaAleat = new Carta (rGen.nextInt(1,13),rGen.nextInt(1,4));
println (cartaAleat);
}
// variável de instància que permite a utilização de gerador de números aleatórios
public RandomGenerator rGen = RandomGenerator.getInstance();
}发布于 2013-04-20 09:49:57
Java枚举已经存在了很长一段时间,因此在这一点上不使用它们实在是浪费。
然而,我理解这可能只是一个练习,用来测试和构建您对Java的理解,一步一步。如果是这样的话(或者如果练习是按照特定的顺序进行的,而且您还没有进入关于enums的章节),那么您可能是想避免它们。我会研究这个假设(没有公文)。
命名常量的四套西装(棍棒,钻石,红桃,黑桃)和四个等级,传统上是代表文字(ACE,杰克,王后,国王)。
命名常量仅仅意味着在代码中,Java可以使用有意义的变量名引用常量值。这并不意味着这些常量必须是Strings,通常情况下,它们不应该是。如果你有:
public class Carta {
public static final int REI = 11;然后,这段代码使用了一个命名常量:
int rank = REI;虽然此代码不是:
int rank = 11;秩常数的值应分别为1、11、12和13。
这显然是在请求一个常量是整数类型的实现,而不是String对象:
public static final int AS = 1; // Ace
public static final int VALETE = 11; // Jack
public static final int DAMA = 12; // Queen
public static final int REI = 13; // King(你得再检查一遍我的价值。)我不会说葡萄牙语,我想我认得Rei和Dama这个词,但不认识其他人)
这些常量是除了其他卡片,排名2通过10。
..。传统上用文字来表示的
我明白,这种语言可能会让人困惑。当他们说“单词”时,他们并不要求String常量。他们指的是,在杰克/王后/国王/ACE之外,其他卡片是2,3,4,5,6,7,8,9,10 .都是数字。
你在这里有一些评论(我对葡萄牙语的理解有限),我认为这是倒退的:
// Constantes do Naipe (Rank) das Cartas
public static final String AS = "Ás";
// Constantes do Valor Facial (Suit) das Cartas
public static final String COPAS = "Copas";As (或Ace)不是Naipe,而是Valor (值或秩)。即使代码是正确的,在软件开发中,使注释也是正确的也很重要。
最后,关于toString()规范,我相信您的现有代码满足了需求。但是,请记住,这些常量实际上应该实现为整数,而不是String常量。因此,如果重写类以将值表示为整数,则需要一个新方法将整数值转换为Strings。
HashMap<Integer,String>可能会为此目的而工作。如果您还没有开始使用泛型,甚至可以使用字符串数组(String[])将int值映射到String,只要您跟踪0索引,或者使用0索引元素作为Invalid值。
https://codereview.stackexchange.com/questions/25285
复制相似问题