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

いずれの場合もが必要であるため、スイッチは適切な選択ではありませんbreak。これにより、多くのコードでほとんど何も実行されなくなります。

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

また、行が非常に多いということは、バグの可能性が高いことを意味します。しかし、さらに悪いことに、データを格納するために基本的にコードを使用しています。

より良い選択は、マップを使用して文字列を検索することです。

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

1つbyteに8つの可能な組み合わせを保存できます。私の決定では、最初の位置(バイトのバイナリ表現)は「青」の色、2番目は「緑」、3番目は「赤」であると述べました。これは、私たちが持っている場合、それは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 に答える