как исправить код(for,switch)

Приведенным данным

MARKS 3 5 2 3 4 4 3 4

должен соответствовать вывод

Satisfactory
Excellent
Unsatisfactory
Satisfactory
Good
Good
Satisfactory
Good

У меня так получилось, но если ввести еще одни данные, то не работает правильно. На входе:

MARKS 3 5 2 3 4 4 PLANETS 1 4 5 1

На выходе:

Satisfactory
Excellent
Unsatisfactory
Satisfactory
Good
Good
Unsatisfactory
Good
Excellent
Unsatisfactory
Mercury
Mars
Jupiter
Mercury

Исходный код решения:

    public static void main(String[] args) {
         for(int i=0;i<args.length;i++) {
                 if(args[i].equals("WEEK_DAYS")) {
                     for (int j = i+1; j < args.length; j++) {
                             switch(args[j]) {
                             case "1":
                                 System.out.println("Monday");
                                 break;
                             case "2":
                                 System.out.println("Tuesday");
                                 break;
                             case "3":
                                 System.out.println("Wednesday");
                                 break;
                             case "4":
                                 System.out.println("Thursday");
                                 break;
                             case "5":
                                 System.out.println("Friday");
                                 break;
                             case "6":
                                 System.out.println("Saturday");
                                 break;
                             case "7":
                             System.out.println("Sunday");
                             break;
                             default:
                                 System.out.println();
                            }
                         }               
                 }else if(args[i].equals("MARKS")) {
                     for (int j = i+1; j < args.length; j++) {
                     switch(args[j]) {
                     case "0":
                     case "1":
                     case "2":
                         System.out.println("Unsatisfactory");
                         break;
                     case "3":
                         System.out.println("Satisfactory");
                         break;
                     case "4":
                         System.out.println("Good");
                         break;
                     case "5":
                         System.out.println("Excellent");
                         break;
                         default:
                             System.out.println();
                    }
                }
                 }else if(args[i].equals("PLANETS")) {
                     for (int j = i+1; j < args.length; j++) {
                     switch(args[j]) {
                 case "1":
                     System.out.println("Mercury");
                     break;
                 case "2":
                     System.out.println("Venus");
                     break;
                 case "3":
                     System.out.println("Earth");
                     break;
                 case "4":
                     System.out.println("Mars");
                     break;
                 case "5":
                     System.out.println("Jupiter");
                     break;
                 case "6":
                     System.out.println("Saturn");
                     break;
                 case "7":
                     System.out.println("Uran");
                     break;
                 case "8":
                     System.out.println("Neptune");
                     break;
                 default:
                     System.out.println();
                 }
             }
         }
        }
    }

Ответы (2 шт):

Автор решения: vasilpetrovich

я сделал, но насколько он оптимизирован

for(int i=0;i<args.length;i++) {
                 if(args[i].equals("WEEK_DAYS")) {
                     for (int j = i+1; j < args.length; j++) {
                         if(args[j].equals("MARKS") || args[j].equals("PLANETS") || args[j].equals("WEEK_DAYS")) {
                             System.out.println();
                             break;
                         };
                             switch(args[j]) {
                             case "1":
                                 System.out.println("Monday");
                                 break;
                             case "2":
                                 System.out.println("Tuesday");
                                 break;
                             case "3":
                                 System.out.println("Wednesday");
                                 break;
                             case "4":
                                 System.out.println("Thursday");
                                 break;
                             case "5":
                                 System.out.println("Friday");
                                 break;
                             case "6":
                                 System.out.println("Saturday");
                                 break;
                             case "7":
                             System.out.println("Sunday");
                             break;
                            }
                         }               
                 }else if(args[i].equals("MARKS")) {
                     for (int j = i+1; j < args.length; j++) {
                         if(args[j].equals("PLANETS") || args[j].equals("WEEK_DAYS") || args[j].equals("MARKS")) {
                             System.out.println();
                             break;
                         };
                     switch(args[j]) {
                     case "0":
                     case "1":
                     case "2":
                         System.out.println("Unsatisfactory");
                         break;
                     case "3":
                         System.out.println("Satisfactory");
                         break;
                     case "4":
                         System.out.println("Good");
                         break;
                     case "5":
                         System.out.println("Excellent");
                         break;
                    }
                }
                 }else if(args[i].equals("PLANETS")) {
                     for (int j = i+1; j < args.length; j++) {
                         if(args[j].equals("MARKS") || args[j].equals("WEEK_DAYS") || args[j].equals("PLANETS")) {
                             System.out.println();
                             break;
                         };
                     switch(args[j]) {
                 case "1":
                     System.out.println("Mercury");
                     break;
                 case "2":
                     System.out.println("Venus");
                     break;
                 case "3":
                     System.out.println("Earth");
                     break;
                 case "4":
                     System.out.println("Mars");
                     break;
                 case "5":
                     System.out.println("Jupiter");
                     break;
                 case "6":
                     System.out.println("Saturn");
                     break;
                 case "7":
                     System.out.println("Uran");
                     break;
                 case "8":
                     System.out.println("Neptune");
                     break;
             }
         }
        }
         }
→ Ссылка
Автор решения: Дмитрий

Решение на вложенных в двойные циклы свичи с условными операторами и все это в одном методе? Уже на этом этапе это нечитаемый код даже с учетом его несложной логики. Я бы в этом случае смотрел на энамы (альтернатива - коллекции типа ключ-значение). Можно примерно так (рефакторинг за вами):

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

public class Main {
    
    public static void main(String[] args) {        
        String [] arg = "MARKS 3 5 2 3 4 4 PLANETS 1 4 5 1".split(" ");        
        Executor executor = new Executor();        
        String result = Stream.of(arg).map(executor::getValue).collect(Collectors.joining(" "));
        System.out.println(result);        
    }
    
}

import java.time.DayOfWeek;
import java.time.format.TextStyle;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;

public class Executor {
    
    private final Map<String, Function<Integer, String>> resolver;
    
    private Function<Integer, String> function;

    public Executor() {
        resolver = new HashMap<>(3);
        resolver.put("MARKS", value -> Mark.values()[Math.max(0, value-2)].getName());
        resolver.put("PLANETS", value -> Planet.values()[value - 1].getName());
        resolver.put("WEEK_DAYS", value -> DayOfWeek.of(value).getDisplayName(TextStyle.FULL, Locale.ENGLISH));
    }
    
    public String getValue(String arg) {
        Optional.ofNullable(resolver.get(arg)).ifPresent(function->this.function = function);
        try {
            return function.apply(Integer.valueOf(arg));
        } catch (Exception e) {
            return "";
        }
    }
    
}

public enum Planet {

    MERCURY("Mercury"),
    VENUS("Venus"),
    EARTH("Earth"),
    MARS("Mars"),
    JUPITER("Jupiter"),
    SATURN("Saturn"),
    URAN("Uran"),
    NEPTUNE("Neptune");

    private final String name;

    private Planet(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

}

public enum Mark {

    UNSATISFACTORY("Unsatisfactory"),
    SATISFACTORY("Satisfactory"),
    GOOD("Good"),
    EXCELLENT("Excellent");

    private final String name;

    private Mark(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

}
→ Ссылка