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

Course Queries Syllabus Queries 3 years ago

8.35K 2 0 0 0

User submissions are the sole responsibility of contributors, with TuteeHUB disclaiming liability for accuracy, copyrights, or consequences of use; content is for informational purposes only and not professional advice.

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 3 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 3 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.

Similar Forum