Как использовать многомерный массив в Java 8 для выполнения блока кода на основе принципа комбинации массивов.Например: мужчина, пятница или женщина, пятница - PullRequest
0 голосов
/ 20 сентября 2019

Я внедряю систему именования для страны, которая основана на дне недели рождения человека.Пользователь должен предоставить системе дату рождения и пол.Тогда система должна дать свое имя.Например ... если день рождения 4 июня 1993 года, днем ​​недели должна быть пятница.Если пол мужской, система присваивает имя как Кофи, но если пол женский, то имя будет Афуа.Я сделал это с помощью оператора Switch, но я чувствую, что это не лучшая реализация для этого.Я ищу ваш лучший подход для такого сценария.

try( Scanner input= new Scanner(System.in)){
        DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("dd/MM/uuuu");        
        System.out.println("Enter your birthdate of the form dd/mm/yy : ");
        String birthDate = input.nextLine();

        System.out.println("Enter your gender in capital letters: ");
        String gender = input.nextLine();
        try {

        if(birthDate.trim().equals("") || birthDate.length()>10){
            System.out.println("There are issues with your date input. Re-enter again: ");
            input.nextLine();

        }

}else{ 
            //date validation of the form dd/MM/uuuu and ensures
            //you can not input something like 31/02/2019
            LocalDate localDate = LocalDate.parse(birthDate, dateFormat.withResolverStyle(ResolverStyle.STRICT));

            //to find the age of a person
            LocalDate today = LocalDate.now();
            long diffInYears = ChronoUnit.YEARS.between(localDate, today);

          //to  get the day of week for a person not old than 120 years.
            if (localDate.isAfter(LocalDate.now().minusYears(120))) {
                DayOfWeek dayOfWeek = localDate.getDayOfWeek();
          System.out.println("You are : "+diffInYears+" years and your birthday was on : "+ dayOfWeek);

//          String[][] genderDayofWeekArray = new String[][]{{"MALE","FEMALE"},{"SUNDAY","MONDAY","TUESDAY"
//          ,"WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"}};    
             String firstName = "";
            if (gender.equals("MALE")){

                switch(dayOfWeek){
                    case SUNDAY: firstName ="Kwasi"; 
                    System.out.println("Your first name is: "+firstName);
                    break;
                    case MONDAY: firstName ="Kwadwo"; 
                     System.out.println("Your first name is: "+firstName);
                    break;
                    case TUESDAY: firstName ="Kwabena"; 
                     System.out.println("Your first name is: "+firstName);
                    break;
                    case WEDNESDAY: firstName ="Kwaku"; 
                     System.out.println("Your first name is: "+firstName);
                    break;
                    case THURSDAY: firstName ="Yaw"; 
                     System.out.println("Your first name is: "+firstName);
                    break;
                    case FRIDAY: firstName ="Kofi"; 
                     System.out.println("Your first name is: "+firstName);
                    break;
                    case SATURDAY: firstName ="Kwame"; 
                     System.out.println("Your first name is: "+firstName);
                    break;
                    default:
                        System.out.println("Invalid operation.");
                }
                //if gender input is FEMALE then name given as per day of week changes
            }else if (gender.equals("FEMALE")){
                switch(dayOfWeek){
                    case SUNDAY: firstName ="Akosua"; 
                    System.out.println("Your first name is: "+firstName);
                    break;
                    case MONDAY: firstName ="Adwoa"; 
                     System.out.println("Your first name is: "+firstName);
                    break;
                    case TUESDAY: firstName ="Abenaa"; 
                     System.out.println("Your first name is: "+firstName);
                    break;
                    case WEDNESDAY: firstName ="Akua"; 
                     System.out.println("Your first name is: "+firstName);
                    break;
                    case THURSDAY: firstName ="Yaa"; 
                     System.out.println("Your first name is: "+firstName);
                    break;
                    case FRIDAY: firstName ="Afua"; 
                     System.out.println("Your first name is: "+firstName);
                    break;
                    case SATURDAY: firstName ="Ama"; 
                     System.out.println("Your first name is: "+firstName);
                    break;
                    default:
                        System.out.println("Invalid operation.");
                }    
            }
            } else {
                System.out.println("Your age limit exceeds 120 years of age. Stone Age ***");
            } }

        } catch (DateTimeParseException e) {
            System.out.print(e);
        }

Будут ли массивы лучшей реализацией, чтобы избежать повторяющегося кода и улучшить производительность, или я на правильном пути?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Для более чистого кода вы можете присвоить перечислению DayOfWeek две переменные FName и Mname с получателями для каждого экземпляра перечисления.Из их вашего кода становится примерно:

if(gender.equals("male") 
    System.out.println(dayofweek.getMname);
else 
    System.out.println(dayofweek.getFname);```
0 голосов
/ 20 сентября 2019

Я бы предложил Map, а не массив.Вы можете либо сопоставить день от пола, чтобы имя или пол в день, чтобы имя.

EnumMap<DayOfWeek,Map<String,String>> names = new EnumMap<>(DayOfWeek.class);
names.put(MONDAY, Map.of("Male", "Kwasi", "Female", "Akosua"));
...

Тогда получить подходящее имя просто names.get(day).get(gender).

...