Хорошая задача, но мне не хочется пытаться оптимизировать имеющийся код. Тут можно (и наверно нужно) применять коллекции. Поэтому давайте попробуем сделать реализацию с нуля.
Итак, первое - это составление учебного плана. В нем должны быть предметы и количество занятий (пусть это будут пары). Для хранения подобной информации лучше всего подходит структура данных называемая карта. А то что нужно реализовать в общем случае называется 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
2 years ago
В общем, есть задание: Напишите консольную программу, которая составляет 5-ти дневное расписание занятий для одной группы на основе введенных предметов и соответственно для каждого предмета - академических часов в неделю. При условии что максимальное количество пар в день - 4. ( 2 академических часа = 1 пара )
Проверьте пожалуйста по возможности уже существующий код на наличия каких-то ошибок в плане реализации и может советы какие-то, ну и помощь нужна именно в составлении 5-ти дневного расписания занятий, а то уже всю голову себе сломал, ну не могу найти отличное решение, нужен какой-то алгоритм составления расписания, немного о коде могу рассказать: Есть два массива, в одном название предмета, в другом, в соответствии с первым по номерам элемента([0] - [0] т.д.), число пар которые должны быть проведены за неделю(5 дней), проверку на соответствие реализовал, чтобы до момента формирования расписания дошли только корректные данные. =)