Loading...
DilyanaGeorgieva avatar DilyanaGeorgieva 81 Точки

Java - Exam 18.03.17 Задача 3: Кола под наем / Car to go

Имам проблем с 3-та задача от изпита на 18.03. В Judge не минава един тест(не е от нулевите) и ми дава 87 точки. Аз не си виждам грешката, някой може ли да помогне?. Това ми е кода на решението:

import java.util.Scanner;

public class p03CarToGo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        double budget = Double.parseDouble(scan.nextLine());
        String season = scan.nextLine().toLowerCase();

        if(budget < 10){
            System.out.println("Invalid number");
        }else if(budget <= 100){
            System.out.println("Economy class");
            if(season.equals("summer")){
                System.out.printf("Cabrio - %.2f%n",budget * 0.35);
            }else if(season.equals("winter")){
                System.out.printf("Jeep - %.2f%n",budget * 0.65);
            }
        }else if(budget <= 500){
            System.out.println("Compact class");
            if(season.equals("summer")){
                System.out.printf("Cabrio - %.2f%n",budget * 0.45);
            }else if(season.equals("winter")){
                System.out.printf("Jeep - %.2f%n",budget * 0.80);
            }
        }else if(budget > 500){
            System.out.println("Luxury class");
            System.out.printf("Jeep - %.2f%n",budget * 0.90);
        }else if(budget >=10000){
            System.out.println("Invalid number");
        }
    }
}
Тагове:
0
Programming Basics
simeon3000 avatar simeon3000 264 Точки

Дори без да чета условието и без да знам Java, ми се наби в очи следното:

else if(budget > 500){
            System.out.println("Luxury class");
            System.out.printf("Jeep - %.2f%n",budget * 0.90);
        }else if(budget >=10000){
            System.out.println("Invalid number");

 

По този начин изписано, ако едно число е по-голямо или равно на 10 000, ще се изпълнят и условието за > 500, и условието >= 10 000, защото условията се изпълняват по реда на записване.

За да избегнеш това може да обърнеш реда на проверката, например така:

1. if(budget < 10) ... 

2. else if(budget >=10000) ... 

3. else if(budget > 500) ...

4.  и т.н. ги намаляваш,

като дори може да не изписваш последното условие (а да го оставиш в "else") между 10 и следващото по големина , защото ще си обхванала всички други възможности. И разбира се да внимаваш с >, >= ...

 

ред.

или по-добре, така както си започнала с < , продължаваш с < до края:

1. if(budget < 10) -> "Invalid number"

2. else if(budget <= 100) -> "Economy class"

3. else if(budget <= 500) -> "Compact class"

4. else if(budget < 10000) -> "Luxury class"

5. else -> "Invalid number"
0
20/03/2017 16:14:27
DilyanaGeorgieva avatar DilyanaGeorgieva 81 Точки

И аз се усъмних за граничните стойности, понеже нулевите тестове не са с тях.

А тези скоби [10.00 .... 10000.00], нали означават и включително числата?

0
simeon3000 avatar simeon3000 264 Точки

Това което написах по-горе не е съвсем вярно, но задачата пак ще изкарва грешен отговор.

Ако числото е по-голямо или равно на 10 000, ти ще очакваш да получиш съответното, но това няма да се случи, защото програмата ще провери първо дали е по-голямо от 500  и ще спре да проверява надолу. Тоест за числата от 10 000 нагоре, ще връща грешни отговори.

Граничните стойности не ги коментирам, защото не съм чел условието :)

0
DilyanaGeorgieva avatar DilyanaGeorgieva 81 Точки

И при обединяване на двете условия за извън диапазона не се променят точките.

if(budget < 10 || budget > 10000){
    System.out.println("Invalid number");
}

Явно не е там проблема, или аз не интерпретирам правилно това:  [10.00 .... 10000.00].

Това е условието: http://pastebin.com/BwSYqZ13

А това е решението за 87 точки: http://pastebin.com/aMTk8fp6

0
20/03/2017 19:14:13
danslavov avatar danslavov 22 Точки

Ако още не дава 100 точки, пробвайте да направите процентите не примерно 0.65, ами 65/100. Аз на изпита имах абсолютно същия проблем - само 1 тест не минаваше и половин час се чудих за това :D

0
29/03/2017 11:23:40
boryana.ai avatar boryana.ai 0 Точки

Получава се, ако се ползва деление на 100. Доста странно:) Би ми било интересно да видя тестовете, но вече не ги качват.

Благодаря за съдействието!

0
DilyanaGeorgieva avatar DilyanaGeorgieva 81 Точки

И аз много благодаря, наистина човек не очаква откъде ще излезе зайчето за 100-те точки.

0
Kapincho avatar Kapincho 1 Точки

Поклон до земята! Два часа се мъчим с колегите да открием къде е проблема, пък то какво било... Наистина е много странен бъг: дори не се появява при всички пресмятания на проценти - само лятно време при 35-те процента на "Economy class". cheeky

0
ElenaSei avatar ElenaSei 11 Точки

Колеги, и на мен продължава да ми дава същата грешка, независимо как пресмятам процентите. Ето и кода: https://pastebin.com/48VMhEiP

Някакви идеи?

0
JohnSmith avatar JohnSmith 0 Точки

Току що и аз си оглеждах решението - набий 35 / 100 , вместо .35 или 0.35, и би трябвало да ти изкара 100т. 

0
Gerry.M avatar Gerry.M 17 Точки

Здравейте,

аз опитах да заменя 0.35 с 35/100 и пак получавам 87 точки.

https://pastebin.com/H6mgQdHH

Нещо не разбирам какво се случва, моля за помощ.

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