Оператор переключения и строка в байт


byte color нужно сохранить цвета (например, красный или зеленый). Результат метода show() должен использовать переключатель для классификации и описания этих цветов (в различных вариантах, таких как: красный-синий, зеленый-красный и т. д.) *не может использовать enum

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   
    }
}

Я на правильном пути? Как сохранить строки в байтах? Спасибо

2 2

2 ответа:

В одном 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"

Переключатель не является хорошим выбором, потому что вам нужен 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);