将整数转换为打印字符串的最佳方法
Best way to convert Integer to print a String
我有一个可能很愚蠢的小问题。我不确定如何导航。我想弄清楚如何转换 Integer 以便像下面的单元测试一样打印出 String 。 我不允许使用枚举,因为确切的问题要求将其表示为整数。我需要一个 HashMap,还是只需要简单的 switch 语句?当我运行单元测试时,我需要它打印出来:
Cat (Ragdoll: House Cat) is 1 year old, is 30 units fast.
但目前正在打印:
Cat (Ragdoll: 3) is 1 year old, is 30 units fast.
Cat Class(我去掉了不相关的方法):
public class Cat extends Animal {
private Integer type;
private String breed;
static final Integer LION = 1;
static final Integer TIGER = 2;
static final Integer HOUSE_CAT = 3;
static final Integer PUMA = 4;
public Cat(int age, int speed, Integer type, String breed){
super(age, speed);
this.type = type;
this.breed = breed;
}
public String getBreed() {
return breed;
}
public Integer getType() {
return type;
}
public String toString() {
return ("Cat (" + breed + ": " + type + ")" + super.toString());
}
}
单元测试(可以在 Dog class 中使用枚举,所以没有问题)。
@Test
void testAllParts() {
Animal dog = new Dog(12, 30, Dog.type.GUNDOG, "Irish Setter");
Animal cat = new Cat(1, 30, Cat.HOUSE_CAT, "Ragdoll");
assertTrue(dog.isOlder(cat));
assertFalse(cat.isOlder(dog));
assertFalse(dog.isFaster(cat));
assertFalse(cat.isFaster(dog));
assertEquals("Dog (Irish Setter: GUNDOG) is 12 years old, is 30 units fast.", dog.toString());
assertEquals("Cat (Ragdoll: House Cat) is 1 year old, is 30 units fast.", cat.toString());
assertFalse(dog.equals(cat));
Animal [] a = dog.multiply(2);
assertEquals(a[0], a[1]);
assertFalse(dog.equals(a[0]));
assertEquals(2, a.length);
a = cat.multiply(2);
assertEquals(a[0], a[1]);
assertFalse(cat.equals(a[0]));
assertEquals(2, a.length);
}
在这里使用 enum
是显而易见的选择,但由于您声明不能使用它们,您可以使用 Map
从值到名称:
private static final Map<Integer, String> TYPES =
Map.of(1, "Lion",
2, "Tiger",
3, "House cat",
4, "Puma");
然后在toString
方法中使用:
public String toString() {
return ("Cat (" + breed + ": " + TYPES.get(type) + ")" + super.toString());
}
我有一个可能很愚蠢的小问题。我不确定如何导航。我想弄清楚如何转换 Integer 以便像下面的单元测试一样打印出 String 。 我不允许使用枚举,因为确切的问题要求将其表示为整数。我需要一个 HashMap,还是只需要简单的 switch 语句?当我运行单元测试时,我需要它打印出来:
Cat (Ragdoll: House Cat) is 1 year old, is 30 units fast.
但目前正在打印:
Cat (Ragdoll: 3) is 1 year old, is 30 units fast.
Cat Class(我去掉了不相关的方法):
public class Cat extends Animal {
private Integer type;
private String breed;
static final Integer LION = 1;
static final Integer TIGER = 2;
static final Integer HOUSE_CAT = 3;
static final Integer PUMA = 4;
public Cat(int age, int speed, Integer type, String breed){
super(age, speed);
this.type = type;
this.breed = breed;
}
public String getBreed() {
return breed;
}
public Integer getType() {
return type;
}
public String toString() {
return ("Cat (" + breed + ": " + type + ")" + super.toString());
}
}
单元测试(可以在 Dog class 中使用枚举,所以没有问题)。
@Test
void testAllParts() {
Animal dog = new Dog(12, 30, Dog.type.GUNDOG, "Irish Setter");
Animal cat = new Cat(1, 30, Cat.HOUSE_CAT, "Ragdoll");
assertTrue(dog.isOlder(cat));
assertFalse(cat.isOlder(dog));
assertFalse(dog.isFaster(cat));
assertFalse(cat.isFaster(dog));
assertEquals("Dog (Irish Setter: GUNDOG) is 12 years old, is 30 units fast.", dog.toString());
assertEquals("Cat (Ragdoll: House Cat) is 1 year old, is 30 units fast.", cat.toString());
assertFalse(dog.equals(cat));
Animal [] a = dog.multiply(2);
assertEquals(a[0], a[1]);
assertFalse(dog.equals(a[0]));
assertEquals(2, a.length);
a = cat.multiply(2);
assertEquals(a[0], a[1]);
assertFalse(cat.equals(a[0]));
assertEquals(2, a.length);
}
在这里使用 enum
是显而易见的选择,但由于您声明不能使用它们,您可以使用 Map
从值到名称:
private static final Map<Integer, String> TYPES =
Map.of(1, "Lion",
2, "Tiger",
3, "House cat",
4, "Puma");
然后在toString
方法中使用:
public String toString() {
return ("Cat (" + breed + ": " + TYPES.get(type) + ")" + super.toString());
}