Професионална програма
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 1836 Точки

Здравей,

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

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

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

0
zdravkostov avatar zdravkostov 4 Точки

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

0