通过枚举的其他值设置枚举值

时间:2020-06-08 17:53:22

标签: java enums

我想要一种使用第一个值作为参数来获取第二个值的方法。 为了说明这一点,Nota是标记(西班牙语),第二个值是此处使用的评分标准(而不是F,D-,D,C ...)

如您所见,等级标准被重复,而整数编号。 (是的,此练习应使用浮点数进行,但请忽略它),因此int值(numNota)类似于标识符。

public enum Nota {
NOTA0(0,"Suspenso"),
NOTA1(1,"Suspenso"),
NOTA2(2,"Suspenso"),
NOTA3(3,"Suspenso"),
NOTA4(4,"Suspenso"),
NOTA5(5,"Suficiente"),
NOTA6(6,"Bien"),
NOTA7(7,"Notable"),
NOTA8(8,"Notable"),
NOTA9(9,"Sobresaliente"),
NOTA10(10,"Sobresaliente");

private int numNota;
private String stringNota;

Nota(int numNota, String stringNota) {
  this.numNota = numNota;
  this.stringNota = stringNota;
}

public int getNumNota() {
    return numNota;
}

public String getStringNota() {
    return stringNota;
}

public void setByNumNota(int numNota) {
    this.numNota = numNota;
    this.stringNota = ?????????
}

我要为校友分配每个nota(标记)

public Alumno(String nombre, Nota nota) {
    this.nombre = nombre;
    this.nota = nota;
}

输入扫描仪正在引入标记。这就是为什么我需要根据mark的int值创建一个Nota对象的原因。

此练习尚无数据库。我们的类现在是完整的java,现在所有数据都已加载到内存中(我希望我们已经在使用DB)

1 个答案:

答案 0 :(得分:1)

由于可以从stringNota中确定numNota(但不能反过来确定),因此它不必是构造函数参数。您可以在构造函数内部简单地对其进行计算,而仅将数字作为参数。

public enum Nota {
NOTA0(0),
NOTA1(1),
NOTA2(2),
NOTA3(3),
NOTA4(4),
NOTA5(5),
NOTA6(6),
NOTA7(7),
NOTA8(8),
NOTA9(9),
NOTA10(10);

private int numNota;
private String stringNota;

Nota(int numNota) {
  this.numNota = numNota;
  stringNota = stringFromNumNota(numNota); //see below
}

由于构造函数实际上是私有的,因此无需检查负数和大于10的数字。

编辑:要从stringNota获取numNota,您只需编写一个额外的方法即可。

public String stringFromNumNota(int numNota) {
  return numNota < 5 ? "Suspenso"
    : numNota == 5 ? "Suficiente"
    : numNota == 6 ? "Bien"
    : numNota < 9 ? "Notable"
    : "Sobresaliente";
}