Оператор переключения и строка в байт
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 ответа:
В одном
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);