Loading...
zdravkostov avatar zdravkostov 4 Точки

Java Advanced 5. Robotics

Условие:

https://softuni.bg/trainings/resources/officedocument/59899/exercise-java-advanced-may-2021/3345

Дава ми 10/100, като и 2та тестови примера са ми верни. И не знам къде ми е грешката.

Като направих дебъг, използвайки създаден от мен дълъг пример програмата ми работи точно както трябва.

Ето ми го кода:

 

public class Robotics {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        ArrayDeque<String> queue = new ArrayDeque<>();

        String[] data = scan.nextLine().split(";");

        Map<String, Integer> robots = new LinkedHashMap<>(); //има константни имена и секунди на робота
        Map<String, Boolean> freeRobots = new HashMap<>(); //показва вярно ако не е зает и грешно ако е зает
        Map<String, Integer> cooldown = new HashMap<>(); //даден е инт, който се намаля всеки път с 1

        String[] robotData = new String[2];
        for (int i = 0; i < data.length; i++) { //давам стойности на всичко
            robotData[0] = data[i].split("-")[0];
            robotData[1] = data[i].split("-")[1];
            robots.put(robotData[0], Integer.parseInt(robotData[1]));
            freeRobots.put(robotData[0], true);
            cooldown.put(robotData[0], 0);
        }

        String[] time = scan.nextLine().split(":");
        int hours = Integer.parseInt(time[0]);
        int minutes = Integer.parseInt(time[1]);
        int seconds = Integer.parseInt(time[2]);

        String material = scan.nextLine();

        while (!material.equals("End")) { //въвеждам продукти
            queue.offer(material);
            material = scan.nextLine();
        }

        while (queue.size() > 0) { 
            seconds++;
            if (seconds == 60) {
                seconds = 0;
                minutes++;
                if (minutes == 60) {
                    hours++;
                    minutes = 0;
                }
            }

            for (Map.Entry<String, Integer> entry : robots.entrySet()) { //проверява заетите роботи и им намаля
                                                       //времето с 1, като костантата от robots не е променена    
                if (freeRobots.get(entry.getKey()) == false) {
                    cooldown.put(entry.getKey(), cooldown.get(entry.getKey()) - 1);
                    if (cooldown.get(entry.getKey()) == 0) { //ако времето е 0 го правя свободен
                        freeRobots.put(entry.getKey(), true);
                    }
                }
            }

            boolean anyone = false; //проверява дали има робот, който е взел продукт

            for (Map.Entry<String, Integer> entry : robots.entrySet()) { //дава на незаетите роботи задача
                if (freeRobots.get(entry.getKey()) == true) {
                    freeRobots.put(entry.getKey(), false);
                    cooldown.put(entry.getKey(), entry.getValue());
                    System.out.print(entry.getKey() + " - " + queue.poll() + " ["); //извеждане и махане на най-горния
                                                                                    //елемент от опашката
                    if (hours < 10) {
                        System.out.print("0");
                    }
                    System.out.print(hours + ":");
                    if (minutes < 10) {
                        System.out.print("0");
                    }
                    System.out.print(minutes + ":");
                    if (seconds < 10) {
                        System.out.print("0");
                    }
                    System.out.println(seconds + "]");
                    anyone = true
                    break;
                }
            }

            if (anyone == false) { //ако няма, мести продукта най-отзаде
                queue.offer(queue.poll());
            }
        }
    }
}
Тагове:
0
Java Advanced
icowwww avatar icowwww 2813 Точки

Здравей,

Не успях да видя другия проблем, но открих този, с който дава 60/100:

Проверка за часовете дали са 24 и да ги прави на нула както минутите и секудните

48 ред : https://pastebin.com/5yivTGBd

0
zdravkostov avatar zdravkostov 4 Точки

Мерси, аз не си мислех че има нужда изобщо да правя тази проверка. Виждам, че едната ми грешка ми е че излиза от рамките за време, за това ще потърся къде вероятно може да зацикли. Но и аз след като дебъгвах тази задача със състезателна трудност за половин час не открих да има проблем.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.