помощ за задача 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 точки и грешка при Пловдив. Наистина не мога да открия тази грешка...
ето го новото ми решение:
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 if (sales < 0) { 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 if (sales < 0) { 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 if (sales < 0){ System.out.println("error"); } }else { System.out.println("error"); } System.out.printf("%.2f", comission); } }мога да предложа решението на 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 от първия път без корекции:
import java.util.Scanner; public class TradeComissions { public static void main(String[] args) { Scanner console = new Scanner(System.in); String town = console.nextLine(); Double sales = Double.parseDouble(console.nextLine()); if (town.equals("Sofia")) { if (sales >=0 && sales <= 500) System.out.printf("%.2f", sales * 0.05); else if (sales >=500 && sales <= 1000) System.out.printf("%.2f", sales * 0.07); else if (sales >=1000 && sales <= 10000) System.out.printf("%.2f", sales * 0.08); else if (sales > 10000) System.out.printf("%.2f", sales * 0.12); else System.out.println("error");} else if (town.equals("Varna")) { if (sales >=0 && sales <= 500) System.out.printf("%.2f", sales * 0.045); else if (sales >=500 && sales <= 1000) System.out.printf("%.2f", sales * 0.075); else if (sales >=1000 && sales <= 10000) System.out.printf("%.2f", sales * 0.1); else if (sales > 10000) System.out.printf("%.2f", sales * 0.13); else System.out.println("error");} else if (town.equals("Plovdiv")) { if (sales >=0 && sales <= 500) System.out.printf("%.2f", sales * 0.055); else if (sales >=500 && sales <= 1000) System.out.printf("%.2f", sales * 0.08); else if (sales >=1000 && sales <= 10000) System.out.printf("%.2f", sales * 0.12); else if (sales > 10000) System.out.printf("%.2f", sales * 0.145); else System.out.println("error");} else System.out.println("error"); } }mobretenova, благодаря!
Пробвах твоя код в Judge и Details показва грешка при отрицателно число.
Може би проблем ти прави променливата comission, която е равна на нула.
Пробвах и с други стойности на comission, и тогава като изход изкарва стойността на comission, което пак не е вярно.
Може би вариантът е да я махнеш и да печатиш резултат след всяка проверка, като при мен - хамалската :)
Иначе в judge, в Details можеш да видиш какво не е както трябва:
Очакван Output и твоя Output, както и при какъв Input са.
Привет,
С тази логика не гърми и дава 100 от 100:
import java.util.Scanner; public class TradeComissions { public static void main (String[] args) { Scanner scanner = new Scanner (System.in); String toun = scanner.nextLine ().toLowerCase (); double sales = Double.parseDouble (scanner.nextLine ()); double commission = -1; if (toun.equals ("sofia")) { if (sales < 0) { System.out.println ("error"); } else if (sales >= 0 && sales <= 500) { commission = 5; } else if (sales <= 1000) { commission = 7; } else if (sales <= 10000) { commission = 8; } else if (sales > 10000) { commission = 12; } } else if (toun.equals ("varna")) { if (sales < 0) { System.out.println ("error"); } else if (sales >= 0 && sales <= 500) { commission = 4.5; } else if (sales <= 1000) { commission = 7.5; } else if (sales <= 10000) { commission = 10; } else if (sales > 10000) { commission = 13; } } else if (toun.equals ("plovdiv")) { if (sales < 0) { System.out.println ("error"); } else if (sales >= 0 && sales <= 500) { commission = 5.5; } else if (sales <= 1000) { commission = 8; } else if (sales <= 10000) { commission = 12; } else if (sales > 10000) { commission = 14.5; } } else { System.out.println ("error"); } if (commission != -1) { System.out.printf ("%.2f", sales * (commission / 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. Благодаря на всичко за включването и съдействието!