Хорошая задача, но мне не хочется пытаться оптимизировать имеющийся код. Тут можно (и наверно нужно) применять коллекции. Поэтому давайте попробуем сделать реализацию с нуля.
Итак, первое - это составление учебного плана. В нем должны быть предметы и количество занятий (пусть это будут пары). Для хранения подобной информации лучше всего подходит структура данных называемая карта. А то что нужно реализовать в общем случае называется CRUD - создание и редактирование данных. Ключом карты будет название предмета, а значением - количество пар в неделю.
    // вместо сканнера
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    //карта учебного плана
    Map<String, Integer> syllabus = new HashMap<>();
    // читаем строки с консоли
    while (true) {
        if (syllabus.isEmpty()) {
            System.out.println("Учебный план пуст");
        } else {
            System.out.println("\nУчебный план:");
            for (String subject : syllabus.keySet()) {
                System.out.println(subject + " " + syllabus.get(subject));
            }
            System.out.println();
        }
        System.out.println("Введите название предмета и количество часов через пробел");
        String msg = reader.readLine();
        if (msg.equals("составить расписание")) break;
        String[] split = msg.split(" ");
        String subject = split[0];  
        int value = Integer.parseInt(split[1]); // тут нужно обработать ошибку парсинга
        syllabus.put(subject, value);
    }
    reader.close();
Такой примитивный круд без D. Вы можете вводить названия и объем новых предметов и изменять объем уже имеющихся в учебном плане. Вводить и редактировать предметы можно вечно, пока не будет введена фраза "составить расписание". После этого мы вываливаемся из редактирования учебного плана и переходим к составлению расписания.
Что нам для этого нужно? Еще одна карта, в которой ключами будут дни недели, а значениями - списки занятий. Собственно
Map<String, List<String>> schedule = new HashMap<>();
Чтобы заполнить ее днями недели нужен список дней недели
    List<String> week = new ArrayList<>();
    week.add("понедельник");
    week.add("вторник");
    week.add("среда");
    week.add("четверг");
    week.add("пятница");
В карте ключи хранятся в рандомном порядк
                        
                        
manpreet
                                                    Best Answer
                                                
                                                                                                        3 years ago
                                                
                                            
В общем, есть задание: Напишите консольную программу, которая составляет 5-ти дневное расписание занятий для одной группы на основе введенных предметов и соответственно для каждого предмета - академических часов в неделю. При условии что максимальное количество пар в день - 4. ( 2 академических часа = 1 пара )
Проверьте пожалуйста по возможности уже существующий код на наличия каких-то ошибок в плане реализации и может советы какие-то, ну и помощь нужна именно в составлении 5-ти дневного расписания занятий, а то уже всю голову себе сломал, ну не могу найти отличное решение, нужен какой-то алгоритм составления расписания, немного о коде могу рассказать: Есть два массива, в одном название предмета, в другом, в соответствии с первым по номерам элемента([0] - [0] т.д.), число пар которые должны быть проведены за неделю(5 дней), проверку на соответствие реализовал, чтобы до момента формирования расписания дошли только корректные данные. =)