2

byte color必须保持颜色(如红色或绿色)。方法的结果show()必须使用开关来分类和描述这种颜色(在不同的变体中,如:红蓝、绿红等)*不能使用枚举

public class Candy {

    //fields
    int quantity;
    byte color;
    double price;

    //constructor
    Candy(int quantity, byte color, double price)
    {
        this.quantity = quantity;
        this.color = color;
        this.price = price;
    }

    //this method have to show class fields
        public void show(String colors) 
    {
        switch(color)
        {
        case 1: colors = "red";
        case 2: colors = "green";
        case 3: colors = "blue";
    }

            //tried to convert 
    //String red = "Red";
    //byte[] red1 = red.getBytes();
    //String green = "Green";
    //byte[] green1 =  green.getBytes();



    public static void main(String[] args)
    {
    //program   
    }
}

我走的好吗?如何将字符串保存在字节中?谢谢

4

2 回答 2

3

switch 不是一个好的选择,因为break在每种情况下都需要一个 switch,这使得很多代码做的很少:

switch (color) {
   case 1: colors = "red"; break;
   ... etc

此外,有这么多行意味着有更多的错误空间。但更糟糕的是,您实际上是在使用代码来存储数据。

更好的选择是使用 Map 并查找字符串:

private static Map<Byte, String> map = new HashMap<Byte, String>() {{
    put(1, "red");
    put(2, "green");
    etc
}};

然后在你的方法中

return map.get(color);
于 2012-12-03T00:17:56.670 回答
1

在一个byte中,您可以存储 8 种可能的组合。在我的决定中,我声明第一个位置(字节的二进制表示)是“蓝色”,第二个 - “绿色”,第三个 - “红色”。这意味着如果我们有001- 它是蓝色的。如果101- 它的红蓝色等等。这是你的show()方法:

public void show() 
{
    switch (color & 4){
        case 4:
            System.out.print("red ");
        default:
            switch (color & 2){
                case 2:
                    System.out.print("green ");
                default:
                    switch (color & 1){
                        case 1:
                            System.out.print("blue");
                    }
            }
    }
    System.out.println();
}

方法调用:

new Candy(1, (byte)7, 10d).show(); //prints "red green blue"
于 2012-12-03T00:34:06.157 回答