Loading...
Olegati avatar Olegati 7 Точки

Въпрос 03. Harvest - More Exercises Conditional Statements

Здравейте, 

При първото решение на задачката получих 90/100 (Test 10 ми дава грешка): https://pastebin.com/NW3uqAsi

След това, намерих решение в форума и преправих кода 100/100: https://pastebin.com/BgzdJ6YA

Мисля че проблема е при закръгляването на резултата преди System.out.printf(" "); - Когато загръглих променливите в System.out.printf(" "); резултата се получи 100/100. 

Може ли някой да обясни защо става така, ако това е проблемът?

Благодаря!

Тагове:
0
Programming Basics with Java
MartinBG avatar MartinBG 4803 Точки

При задачи като тази е най-добре да следвате стриктно условието на заданието за да избегнете подобни грешки при гранични стойности.

Нека разгледаме следния код от задачата с 90/100 точки:

            litresWine = Math.floor(litresWine);
            double wineLeft = Math.ceil(litresWine - wineNeededForSale);
            double wineLeftPerWorker = Math.ceil(wineLeft / workers);

Да приемем, че:

litresWine = 10.99

wineNeededForSale = 5

workers = 4

И да сметнем:

            litresWine = Math.floor(litresWine); // 10.99 -> 10
            double wineLeft = Math.ceil(litresWine - wineNeededForSale); // (10 - 5) = 5
            double wineLeftPerWorker = Math.ceil(wineLeft / workers); // ceil(5/4) = ceil(1.25) = 2
            System.out.printf("Good harvest this year! Total wine: %.0f liters.", litresWine);
            System.out.println();
            System.out.printf("%.0f liters left -> %.0f liters per person.", wineLeft, wineLeftPerWorker);

При решението за 100/100 ще получим:

            double wineLeft = litresWine - wineNeededForSale; // 10.99 - 5.0 = 5.99
            double wineLeftPerWorker = wineLeft / workers; // 5.99 / 4 = 1.4975
            System.out.printf("Good harvest this year! Total wine: %.0f liters.", Math.floor(litresWine)); 
            // floor(10.99) = 10
            System.out.println();
            System.out.printf("%.0f liters left -> %.0f liters per person.", Math.ceil(wineLeft), Math.ceil(wineLeftPerWorker));
            // ceil(5.99) = 6, ceil (1.4975) = 2

Както се вижда от примера, при тези стойности първото решение ще отпечата "5 liters left...", а второто - "6 liters left...". Разбира се, има и стойности, при които двете решения ще дадат еднакъв резултат.

1
22/01/2021 00:20:39
Olegati avatar Olegati 7 Точки

Благодаря за отговора - разбрах грешката.

Или litresWine = Math.floor(litresWine); трябва да се премести най-отдолу, преди System.out.printf, за да не влияе на двете уравнения(wineLeft и wineLeftPerWorker). Или закръгляването трябва да става в System.out.printf();.

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