Професионална програма
Loading...
+ Нов въпрос
Kaloian9696 avatar Kaloian9696 0 Точки

DishWasher

Здравейте , решавам задачата и ми дава 90/100 . Въртях я прекалено много време , какво ли не пробвах и повече от 90 не дава. Прилагам решение: https://pastebin.com/Di2KwqDC, условие : https://pasteboard.co/JBqjcBM.png. Много ми е чудно къде греша ? 

0
Programming Basics
MartinBG avatar MartinBG 3078 Точки

Като за начало, използвате много променливи, при това с безсмислени имена (b, a), подвеждащи такива (potscount - за недостатъчното количество препарат) или твърде сходни (sum и potsSumpotsSumpotspotscountcounter и potscount).

Това прави кодът изключително труден за четене и дебъгване, както и много лесен за допускане на грешки.

Сигурен съм, че дори и Вие не може да се ориентирате в тази плетеница! wink

 

Като първа стъпка, да се опитаме да дадем смислени имена на променливите:

import java.util.Scanner;

public class Dishwasher {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int remainingDetergent = 750 * Integer.parseInt(scanner.nextLine());
        int dishesCount = 0;
        int neededDetergent = 0;
        int counter = 0;
        int potsCount = 0;
        int weirdVariable = 0;
        boolean isEnough = false;
        while (remainingDetergent >= 0) {
            String text = scanner.nextLine();
            if (text.equals("End")) {
                isEnough = true;
                break;
            }
            int items = Integer.parseInt(text);
            counter++;
            if (counter % 3 == 0) {
                neededDetergent = 0;
                potsCount += items;
                neededDetergent += items * 15;
                weirdVariable = neededDetergent - remainingDetergent;
                remainingDetergent = remainingDetergent - neededDetergent;
                continue;
            }
            dishesCount += items;
            remainingDetergent = remainingDetergent - 5 * items;

        }
        if (isEnough) {
            System.out.printf("Detergent was enough!\n" + "%d dishes and %d pots were washed.\n" + "Leftover detergent %d ml.\n", dishesCount, potsCount, remainingDetergent);
        } else {
            System.out.printf("Not enough detergent, %d ml. more necessary!", weirdVariable);
        }
    }
}

 

Сега проблемите стават по-видими:

1. Увеличавате броя измити съдове, без да сте се уверлили, че наличният препарат е достатъчен за тях (редове №23: potsCount += items; и №29: dishesCount += items;)

2. Изчислявате недостигащия препарат само когато се мият тенджерите (ред №25: weirdVariable = neededDetergent - remainingDetergent;)

3. Използването на isEnough и weirdVariable изглежда излишно, тъй като вече имаме remainingDetergent

 

Помислете сам как да се справите с тези проблеми, а после може да погледнете и това решение.

 

Успех!

1