Нужна реализации задания + проверка кода [закрыт]

Course Queries Syllabus Queries 2 years ago

0 2 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Syllabus Queries related to Course Queries. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago


В общем, есть задание:
 Напишите консольную программу, которая составляет 5-ти дневное расписание занятий для одной группы на основе введенных предметов и соответственно для каждого предмета - академических часов в неделю. При условии что максимальное количество пар в день - 4. ( 2 академических часа = 1 пара )

Проверьте пожалуйста по возможности уже существующий код на наличия каких-то ошибок в плане реализации и может советы какие-то, ну и помощь нужна именно в составлении 5-ти дневного расписания занятий, а то уже всю голову себе сломал, ну не могу найти отличное решение, нужен какой-то алгоритм составления расписания, немного о коде могу рассказать: Есть два массива, в одном название предмета, в другом, в соответствии с первым по номерам элемента([0] - [0] т.д.), число пар которые должны быть проведены за неделю(5 дней), проверку на соответствие реализовал, чтобы до момента формирования расписания дошли только корректные данные. =)

package auto;
import java.util.Scanner;
import java.io.*;
import static java.lang.Math.*;

public class Auto 
{
    public static void main(String[] args) throws IOException 
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Напишите консольную программу, которая составляет 5-ти дневное расписание занятий для одной группы на основе введенных предметов и соответственно для каждого предмета - академических часов в неделю. \nПри условии что максимальное количество пар в день - 4. ( 2 академических часа = 1 пара )");
        System.out.print("Введите количество предметов = ");
        int pars = scan.nextInt();
        if(pars > 10 || pars <= 0) 
        {
            System.out.println("Введенные данные не корректны. Максимальное количество предметов равно 10, минимальное количество должно быть больше нуля. ");
            System.out.println("Хотите ввести еще раз? 1 - да, 0 - нет. ");
            int ch = scan.nextInt();
            switch(ch) 
            {
                case 1: System.out.println("Ошибка..."); // Тут должен быть перезапуск программы, еще не дошел, не знаю как...
                default: System.exit(0);
            }
        }

        String par[] = new String[pars];
        zap(pars, par);  

        int akadem[] = new int[pars];
        akad(pars, akadem, par);

        System.out.println("Все введенные данные корректны.");
        for(int u = 0; u < pars; u++) {
            System.out.println("Предмет " + par[u] + ". Количество пар " + akadem[u]);
        }



    }


    // Заполнение массива данными по предметам
    public static int zap(int pars, String par[]) 
    {
        
                                                
                                                
0 views
0 shares
profilepic.png
manpreet 2 years ago

Хорошая задача, но мне не хочется пытаться оптимизировать имеющийся код. Тут можно (и наверно нужно) применять коллекции. Поэтому давайте попробуем сделать реализацию с нуля.

Итак, первое - это составление учебного плана. В нем должны быть предметы и количество занятий (пусть это будут пары). Для хранения подобной информации лучше всего подходит структура данных называемая карта. А то что нужно реализовать в общем случае называется 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("пятница");

В карте ключи хранятся в рандомном порядк


0 views   0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.