Loading...
KaloyanKrumov avatar KaloyanKrumov 1 Точки

Java Основи на програмирането: Търговски комисионни / Trade Commissions

Моля, някой колега да даде работещо решение на следната задача:

 

" 10. Търговски комисионни
Фирма дава следните комисионни на търговците си според града, в който работят и обема на продажбите s:

Град 0 ≤ s ≤ 500 500 < s ≤ 1 000 1 000 < s ≤ 10 000 s > 10 000
Sofia 5% 7% 8% 12%
Varna 4.5% 7.5% 10% 13%
Plovdiv 5.5% 8% 12% 14.5%

Напишете конзолна програма, която чете име на град (текст) и обем на продажби (реално число) , въведени
от потребителя, и изчислява и извежда размера на търговската комисионна според горната таблица.
Резултатът да се изведе форматиран до 2 цифри след десетичната точка. При невалиден град или обем на
продажбите (отрицателно число) да се отпечата "error".
Примерен вход и изход
вход изход вход изход вход изход вход изход
Sofia
1500 120.00 Plovdiv

499.99 27.50 Varna

3874.50 387.45 Kaspichan
-50 error "

Благодаря!

0
Programming Basics
KaloyanKrumov avatar KaloyanKrumov 1 Точки

А защо моя код е грешен и ми прави false Варна и Пловдив???

Защо стойностите ги караш в низходящ ред, какво е предимството?

Защо се налага да употребиш boolean  за всичко, което ще се въведе грешно?

Исках да знам причината за всичко това, а не само да приписвам.

 

Сърдечно благодаря!!!

 

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String city = scanner.nextLine();
        double sales = Double.parseDouble(scanner.nextLine());
        double profit = 0;

        if (city.equals("Sofia")) {
            if (sales > 0 && sales <= 500) {
                profit = 0.05;
            } else if (sales > 500 && sales <= 1000) {
                profit = 0.07;
            } else if (sales > 1000 && sales <= 10000) {
                profit = 0.08;
            } else if (sales > 1000) {
                profit = 0.12;
            }
            if (city.equals("Varna")) {
                if (sales > 0 && sales <= 500) {
                    profit = 0.045;
                } else if (sales > 500 && sales <= 1000) {
                    profit = 0.075;
                } else if (sales > 1000 && sales <= 10000) {
                    profit = 0.10;
                } else if (sales > 10000)
                    profit = 0.13;
            }
            if (city.equals("Plovdiv")) {
                if (sales > 0 && sales <= 500) {
                    profit = 0.055;
                } else if (sales > 500 && sales <= 1000) {
                    profit = 0.08;
                } else if (sales > 1000 && sales <= 10000) {
                    profit = 0.12;
                } else if (sales > 10000)
                    profit = 0.145;
            }
            if (profit > 0) {
                double result = profit * sales;
                System.out.printf("%.2f", result);
            } else {
                System.out.println("error");
            }


        }
    }
}

















0
DeveloperEnthusiast avatar DeveloperEnthusiast 303 Точки

Не знам в какво IDE пишеш, но ако е intelliJ, както е по програма в Java basics, би трябвало да ти оцвети или подчертае по някакъв начин проверките за "Varna" и "Plovdiv", че са винаги false... или нещо от сорта. Това е така, защото са ти вложени в проверката за "Sofia"... ако хванеш къдравата скоба след if (city.equals("Sofia")) { <- тази, ще видиш къде се затваря, и че другите две за град са вложени в нея. Не е като да не може да се реши без boolean, но в Java-та има switch за разлика от Python, на който пиша по принцип и тъй като има и default към switch-a, а булевите са нещо много хубаво, което ни улеснява живота, а по условие трябва да се провери дали града е валиден - съм му сложил тази default стойност, която виждаш в решението ми. Последно за проверките и техния ред - въпрос на предпочитание е... това как ти изглежда най-лесно и най-логично за конструиране. Когато почнеш от голямо към малко можеш да правиш проверка само за ">" без да проверяваш дали числото е в някакъв диапазон. Няма особено значение като цяло...

На Python може да се направи нещо от сорта на:

valid_towns = ['Sofia', 'Varna', 'Plovdiv']

if town not in valid_towns or profit < 0:
    print('error')

Може и при градевете да сложиш else и направо да принти 'error' и накрая да проверяваш за валиден профит и пак да принтиш 'error', но сигурно ще има проблем ако и двете са невалидни - ще се изпринти два пъти 'error'... Пробвай различни неща и ще видиш кое работи и кое не.

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