【问题标题】:Best way to convert Integer to print a String将整数转换为打印字符串的最佳方法
【发布时间】:2020-12-06 19:03:29
【问题描述】:

我有一个小问题,可能很愚蠢。我不确定如何导航。我想弄清楚如何转换 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 类中使用枚举,所以没有问题)。

@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);
        
    }

【问题讨论】:

  • 不要使用整数常量。了解enums
  • 为了更好地帮助自己提出/回答/审查问题,为什么这会被否决?
  • 你可以使用一个字符串数组:String[] CAT_TYPES = new String[] {"Lion", "Tiger", House Cat", "Puma"};
  • 反对票可能与“我不允许使用枚举”有关,但没有进一步解释为什么您应该避免使用最佳解决方案。

标签: java integer constants


【解决方案1】:

在这里使用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());
}

【讨论】:

    猜你喜欢
    • 2014-06-21
    • 2011-04-13
    • 1970-01-01
    • 2010-10-10
    • 2018-01-15
    • 2017-09-09
    • 2011-12-27
    • 2017-07-26
    相关资源
    最近更新 更多