Преобразование int в тип enum - PullRequest
0 голосов
/ 05 мая 2018

Здравствуйте, у меня возникли проблемы с проектом, над которым я работаю. Я создал тип enum с именем Shift для свинга на завтрак, обед, ужин), Затем у меня есть переключатель с 4 случаями, чтобы выбрать, какой это.

Однако, когда я пытаюсь создать объект без какого-либо пользовательского ввода и устанавливаю значение на случайное число от 1 до 4, появляется сообщение «несовместимые типы: int нельзя преобразовать в Shift»

любая помощь будет оценена!

EDIT * В настоящее время у меня есть это

private void getShiftAsInput()

{

  Scanner cin = new Scanner(System.in);
  System.out.print(" Please enter " + getName()
           + "'s Shift by Number:\n"
                   + "1.  Breakfast\n"
                   + "2.  Lunch\n"
                   + "3.  Dinner\n"
                   + "4.  Swing ========> ");
  String inShift = cin.nextLine();
  switch(inShift){
      case "1": shift = Shift.breakfast; break;
      case "2": shift = Shift.lunch; break;
      case "3": shift = Shift.dinner; break;
      case "4": shift = Shift.swing; break;
      default: getShiftAsInput(); break;
  }
}

public enum Shift { breakfast, lunch, dinner, swing }

и в главном классе пытаюсь это сделать:

   RestaurantWorker[] arr;
   arr = new RestaurantWorker[6];

   arr[0] = new Manager();
   arr[1] = new Manager("John Edelman", "8521100900", 3, 10, 1000, 40000);
   arr[2] = new WaitStaff();
   arr[3] = new WaitStaff("Kelsey Green", "5662902901", 3, 36, 10.25, 40, 10, 2 );
   arr[4] = new KitchenStaff();
   arr[5] = new KitchenStaff("Jeff Brown", "8596042909", 2, 30, 10, 30, 0);

но я получаю ошибку для аргумента после номера телефона.

Ответы [ 3 ]

0 голосов
/ 05 мая 2018

Вы должны предоставить способ конвертации int в вашу цель Enum.

Это мой способ сделать это:

public enum Shift {
   BREAKFAST(1), LUNCH(2), DINNER(3), SWING(4);

   private final int value;

   public Shift(int value) {
      this.value = value; 
   }

   private static final Map<Integer, Shift> SHIFT_MAP = new HashMap<>();
   static {
      Arrays.stream(Shift.values()).forEach(s -> SHIFT_MAP.put(s.getValue(), s));
   }

   public static Shift of(Integer value) {
       return SHIFT_MAP.getOrDefault(value, BREAKFAST); // Here you provide a default Shift value if input wrong value
   }
}

И в вашем заявлении о переключении:

Shift shift = Shift.of(value);
switch(shift) {
  case BREAKFAST:
 ... bla bla
}
0 голосов
/ 05 мая 2018

Вот как должен выглядеть ваш код. Несоответствие типов происходит потому, что вы должны передать ENUM в корпус коммутатора.

public class Practise {
static enum SHIFT {
    BREAKFAST, LUNCH, DINNER
}

public static void main(String[] args) {
    SHIFT key = SHIFT.BREAKFAST; // hardcoded for example, but can be dynamic
    switch (key) {
    case BREAKFAST:

        break;

    default:
        break;
    }
}

}

Когда вы генерируете случайные целочисленные значения, вы можете изменить свою логику, чтобы присвоить значение ENUM переменной. Что-то вроде

SHIFT key = SHIFT.values()[getRandomIndex()];
0 голосов
/ 05 мая 2018

Вы устанавливаете тип int для Типа объекта вместо "Shift = int" try "Shift.YourDataField = int"

"YourDataField" - это любое поле, которое вы устанавливаете в своем объекте, и оно должно иметь тип int

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...