Java Включить Enum Value - PullRequest
       1

Java Включить Enum Value

0 голосов
/ 09 декабря 2018

Я хочу, чтобы пользователь ввел число от 1 до 7. Если число равно 1, выведите его в понедельник.Если число равно 2, выведите его во вторник и т. Д.

Следующий код компилируется, но он не является логически правильным.

Пожалуйста, смотрите комментарии, где требуется помощь:

import java.util.Scanner;

public class Test {
    private enum Week {
        MONDAY("1"), TUESDAY("2"), WEDNESDAY("3"), 
        THURSDAY("4"), FRIDAY("5"), SATURDAY("6"), SUNDAY("7");
        private String value;

        private Week(String value) {
            this.value = value;
        }
    }

    public static void main(String[] args) {

        // How to instantiate this correctly, so that it doesn't only point to one value
        Week week = Week.MONDAY;
        System.out.print("Enter a number: ");
        Scanner input = new Scanner(System.in);
        String userInput = input.next();

        // The switch parameter is not correct. This is what needs to be fixed.
        // I want to use this case layout.
        //The enums each have a value. The user enters a value. I want to switch over userInput.
        switch (week) {
            case MONDAY: System.out.println("That's Monday"); break;
            case TUESDAY: System.out.println("That's Tuesday"); break;
            case WEDNESDAY: System.out.println("That's Wednesday"); break;
            case THURSDAY: System.out.println("That's Thursday"); break;
            case FRIDAY: System.out.println("That's Friday"); break;
            case SATURDAY: System.out.println("That's Saturday"); break;
            case SUNDAY: System.out.println("That's Sunday"); break;
            default: break;
        }
    }
}

Ответы [ 8 ]

0 голосов
/ 09 декабря 2018

Кстати, вот как вы можете написать это без использования переключателя.

import java.util.Map;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Test {
    public static void main(String[] args) {
        System.out.print("Enter a number: ");
        Scanner input = new Scanner(System.in);
        int userInput = input.nextInt();

        WeekDay wd = WeekDay.dayByValueMap.get(userInput);
        if (wd == null)
            System.out.println("Unknown code " + userInput);
        else
            System.out.println("That's " + wd.titleCase());
    }

}

enum WeekDay {
    MONDAY(1), TUESDAY(2), WEDNESDAY(3),
    THURSDAY(4), FRIDAY(5), SATURDAY(6), SUNDAY(7);
    private int value;


    private WeekDay(int value) {
        this.value = value;
    }

    final static Map<Integer, WeekDay> dayByValueMap = Stream.of(values())
            .collect(Collectors.toMap(w -> w.value, w -> w));

    String titleCase() {
        return Character.toTitleCase(name().charAt(0)) + name().substring(1).toLowerCase();
    }
}
0 голосов
/ 09 декабря 2018

Вот пример:

enum Week{
    MONDAY("1");
    private String value;
    Week(String value) {
        this.value = value;
    }
    public String getValue() {
        return value;
    }
    public static Week getInstance(String value) {
        return Week.valueOf(value); 
    }
}
public static void main(String[] args) {
    String a = "1";
    Week w = Week.getInstance(a);
    switch (w) {
        case MONDAY:
            System.out.println("It is monday");
            break;
        default:
            break;
    }
}
0 голосов
/ 09 декабря 2018

просто используйте это:

public class Test {
    private enum Week {
        MONDAY("1"),
        TUESDAY("2"),
        WEDNESDAY("3"),
        THURSDAY("4"),
        FRIDAY("5"),
        SATURDAY("6"),
        SUNDAY("7");
        private String value;

        private Week(String value) {
            this.value = value;
        }
    }

    public static void main(String[] args) {

        // How to instantiate this correctly, so that it doesn't only point to one value

        int dayOfWeek ;
        System.out.print("Enter a number: ");
        Scanner input = new Scanner(System.in);
        dayOfWeek = Integer.valueOf(input.next()) -1;
        if (dayOfWeek  < 0 || dayOfWeek > 6) {
            System.out.println("Out of range day of week");
            System.exit(1);
        }

        // The switch parameter is not correct. This is what needs to be fixed.
        // I want to use this case layout.
        //The enums each have a value. The user enters a value. I want to switch over userInput.
        switch (Arrays.asList(Week.values()).get(dayOfWeek)) {
            case MONDAY: System.out.println("That's Monday"); break;
            case TUESDAY: System.out.println("That's Tuesday"); break;
            case WEDNESDAY: System.out.println("That's Wednesday"); break;
            case THURSDAY: System.out.println("That's Thursday"); break;
            case FRIDAY: System.out.println("That's Friday"); break;
            case SATURDAY: System.out.println("That's Saturday"); break;
            case SUNDAY: System.out.println("That's Sunday"); break;
            default: break;
        }
    }
}
0 голосов
/ 09 декабря 2018

Enum s уже имеют свои целочисленные значения, но они считаются с 0, поэтому вам не нужно отдельное поле value, если вы в порядке с небольшой перестановкой.

import java.util.Scanner;

public class Main {
    private enum Week {
        SUNDAY,
        MONDAY,
        TUESDAY,
        WEDNESDAY,
        THURSDAY,
        FRIDAY,
        SATURDAY;

        static Week get(Integer i) {
            return values()[i % 7];
        }
    }

    public static void main(String[] args) {
        System.out.print("Enter a number: ");
        Scanner input = new Scanner(System.in);
        int userInput = input.nextInt();
        Week week = Week.get(userInput);

        switch (week) {
            case MONDAY:
                System.out.println("That's Monday");
                break;
            case TUESDAY:
                System.out.println("That's Tuesday");
                break;
            case WEDNESDAY:
                System.out.println("That's Wednesday");
                break;
            case THURSDAY:
                System.out.println("That's Thursday");
                break;
            case FRIDAY:
                System.out.println("That's Friday");
                break;
            case SATURDAY:
                System.out.println("That's Saturday");
                break;
            case SUNDAY:
                System.out.println("That's Sunday");
                break;
            default:
                break;
        }
    }
}
0 голосов
/ 09 декабря 2018

Вам необходимо создать переменную Week, соответствующую номеру, который пользователь дал в качестве ввода.Сначала проанализируйте ввод строки, чтобы получить целое число, а затем используйте коллекцию values() типа enum, чтобы получить значение enum:

public static void main(String[] args) {
    System.out.print("Enter a number: ");
    Scanner input = new Scanner(System.in);
    String userInput = input.nextLine();
    int userNumber= Integer.parseInt(userInput) % Week.values().length;
    Week userWeek = Week.values()[userNumber - 1];

    switch (userWeek) {
        case MONDAY: System.out.println("That's Monday"); break;
        case TUESDAY: System.out.println("That's Tuesday"); break;
        case WEDNESDAY: System.out.println("That's Wednesday"); break;
        case THURSDAY: System.out.println("That's Thursday"); break;
        case FRIDAY: System.out.println("That's Friday"); break;
        case SATURDAY: System.out.println("That's Saturday"); break;
        case SUNDAY: System.out.println("That's Sunday"); break;
        default: break;
    }
}
0 голосов
/ 09 декабря 2018

Вам необходимо ввести метод для извлечения константы enum на основе значения, переданного в:

public static Week fetchValue(String constant) {
    for (Week week : Week.values()) {
        if (week.value.equals(constant)) {
            return week;
        }
    }
    return null;
}

Теперь используйте его следующим образом:

Week weekday = Week.fetchValue(userInput);
if (weekday != null) {
   switch (week ) {

    // rest of the code

   }
} else {
   System.out.println("Incorrect input");
}
0 голосов
/ 09 декабря 2018

Вот версия:

import java.util.Arrays;
import java.util.Scanner;

public class Test {
    private enum Week {
        MONDAY(1, "That's Monday"), TUESDAY(2, "That's Tuesday"), WEDNESDAY(3, "That's Wednesday"), THURSDAY(4,
                "That's Thursday"), FRIDAY(5,
                        "That's Friday"), SATURDAY(6, "That's Saturday"), SUNDAY(7, "That's Sunday");

        private int value;
        private String description;

        private Week(int value, String description) {
            this.value = value;
            this.description = description;
        }

        public static Week getByValue(int value) {
            return Arrays.stream(values()).findFirst().get();
        }

        public String getDescription() {
            return description;
        }

    }

    public static void main(String[] args) {

        System.out.print("Enter a number: ");
        Scanner input = new Scanner(System.in);
        int userInput = input.nextInt();

        Week week = Week.getByValue(userInput);

        System.out.println(week.getDescription());
    }
}

Я оставил вам обработку ошибок, когда введенный номер недействителен.

Как видите, я удалил блок switch и получилсообщение из описания enum.

0 голосов
/ 09 декабря 2018

Создайте метод get внутри вашего перечисления Week, чтобы получить Week по заданной строке, например:

public enum Week {
 ...
 public Week getWeek(String key) {
  ... logic lookup 
  ... obtain a Week(weekResult) with that key
  return weekResult;
 }
}

Или вы можете попробовать использовать метод Enum valueOf (...).

Я думаю, что с этим у вас есть все необходимое, чтобы начать правильно?

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