помощ за задача Trade comissions - Java
Зравейте, моля за помощ и съвет, относно решението на задачата. Не мога да си открия грешката. Правих всякакви промени и не излиза.
Ето го условието:
Фирма дава следните комисионни на търговците си според града, в който работят и обема на продажбите 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 |
Ето го и моето решение:
import java.util.Scanner; public class TradeComissions { public static void main(String[] args) { Scanner console = new Scanner(System.in); String town = console.nextLine().toLowerCase(); double sales = Double.parseDouble(console.nextLine()); double comission = 0; if (town.equals("Sofia")) { if (sales >= 0 && sales <=500) { comission = 0.05 * sales; } else if (sales > 500 && sales <= 1000) { comission = 0.07 * sales; } else if (sales > 1000 && sales <= 10000) { comission = 0.08 * sales; } else if (sales > 10000) { comission = 0.12 * sales; }else { System.out.println("error"); } } else if (town.equals("Varna")) { if (sales >= 0 && sales <= 500) { comission = 0.045 * sales; } else if (sales > 500 && sales <= 1000) { comission = 0.075 * sales; } else if (sales <= 10000) { comission = 0.1 * sales; } else if (sales > 10000) { comission = 0.13 * sales; }else { System.out.println("error"); } }else if (town.equals("Plovdiv")) { if (sales >= 0 && sales <= 500) { comission = 0.055 * sales; } else if (sales <= 1000) { comission = 0.08 * sales; } else if (sales <= 10000) { comission = 0.12 * sales; } else if (sales > 10000) { comission = 0.145 * sales; }else { System.out.println("error"); } }else { System.out.println("error"); } System.out.printf("%.2f", comission); } }
Благодаря. Аз междувременно направих корекции и проверките са ми верни. Judge обаче ми даа 94 точки и грешка при Пловдив. Наистина не мога да открия тази грешка...
ето го новото ми решение:
мога да предложа решението на C# първоначално не бях проверил когато комисионата ми е отрицателна и judge ми даваше 94/100.После го оправи и ми даде 100/100 .
https://pastebin.com/XtPKgySF
На Пловдив, където ти е "sales > 10000" , умножи по 0.0145, а не по 0.145. Виж дали така ще се получи.
не, след тази корекция, дори ми ги намали на 88...
аз съм направила проверка за комисиона, ако е <0, но пак ми дава 94.
Случая "error" го разгледай като две отделни if-проверки, едната да е за градовете и втората за продажбите и в двата случая дай Console.WriteLine("error");
Lilia Petrova, направих го, но продължава да ми дава 94 точки.
Jack.black, практически не намирам разлика между твоето решение и моето, но не получавам 100 точки. Ако имаш идея къде в моето решение е грешката, моля за помощ. Благодаря!
Здравей,
Това е моето решение на Java, със знания от курса.
Judge ми даде 100/100 от първия път без корекции:
mobretenova, благодаря!
Пробвах твоя код в Judge и Details показва грешка при отрицателно число.
Може би проблем ти прави променливата comission, която е равна на нула.
Пробвах и с други стойности на comission, и тогава като изход изкарва стойността на comission, което пак не е вярно.
Може би вариантът е да я махнеш и да печатиш резултат след всяка проверка, като при мен - хамалската :)
Иначе в judge, в Details можеш да видиш какво не е както трябва:
Очакван Output и твоя Output, както и при какъв Input са.
Привет,
С тази логика не гърми и дава 100 от 100:
Супер
Много хитро решение
Благодаря ви още веднъж. Ще опитам и двата варианта, за да видя какво ще се случи. Някак исках да схвана защо ми дава грешка. Всички решения, които предлагате изглеждат добри и логични, но не намирам в моето кое не е достатъчно. Задала съм error при отрицателно число, задала съм error и при невалиден град, по моята логика следва, ако някое от тия 2 условия е изпълнено, или и двете, ако са изпълнени, да ми отпечата ерор. И в конзолата го прави. Всички проверки са ми верни. Искам да разбера къде ми е пропуска, а не просто джъдж да ми даде 100 точки. :)
Привет,
Нямам много време и погледнах кода ти набързо и това което ми се наби е:
1.за double comision задай невалидна стойност с някакъв минус например 1.....10000 или колкото решиш :)
2. Проверката за error я сложи на първо място преди другите от sales (както е в кода с който коментирах) и с условие < 0 ... така се подсигуряваш , че аке тя е true , директно излизш от условието и минаваш на следващото .
П.С.: ... има и други решения от типа на return която да е още преди if - else конструкцията и при невалидна стойност директно е error и програмата приключва ... но това е друга тема , а и на този етап имаме още се учи тепърва за нея.
При въпроси не се колебай да ми пишеш ... смятам , че дискусия по код и/или проблем , ще ни надгради ...
MarinKakarov, благодаря. С помощта на дебъгера открих грешката. Като дам най-отдолу общ принт, ми печата и при "error" стойност 0.00, а условието на задачата е при невалиден град или продажби, само тогава да печата "error". Т.е. трябва да слагам под всеки if и принт, за да не ми печата стойностите при всички положения. За това judge ми е давал 94/100. Благодаря на всичко за включването и съдействието!