Java Exercise - Vending Machine
Здравейте колеги , може ли някой да ми помогне със задача 7 от домашното.
Ето го моят код , получавам 85 точки в Judge : https://pastebin.com/LzigZvDw
Здравейте колеги , може ли някой да ми помогне със задача 7 от домашното.
Ето го моят код , получавам 85 точки в Judge : https://pastebin.com/LzigZvDw
https://pastebin.com/xZxmBZbi
Заповядай работещо и малко по-съкратено решение! ;)
И на мен също ми дава 85 точки и грешка в Test #5 (Incorrect answer). Как мога да видя входа на този тест?
Не виждам никакъв проблем в моя код https://pastebin.com/3cYNkD9U
Според мен грешката ти е в първата част на кода.
while (!input.equals("Start")) { switch (input) { case "0.1": case "0.2": case "0.5": case "1": case "2": coins += Double.parseDouble(input); break; default: System.out.printf("Cannot accept %.02f%n", Double.parseDouble(input)); break; } input = scanner.nextLine(); }
Вкарани по тзи начин сумите, ти не можеш да дадеш от конзолата 0,10 или 0,20 или 0,50. Само 0,1 и 0,2 и 0,5. А ти не знаеш дали джъч ги вкарва с една или с две цифри след дес. запетая. В случая някои ги вкарва с два знака след десетичната, защото ти коригирах програмата и стана.
Та... използвай if проверка вместо switch и всичко ще се оправи.
Промени тази част от кода и ще ти даде 100/100:
while (!input.equals("Start")) {
double currentMoney = Double.parseDouble(input);
if (currentMoney == 0.1 || currentMoney == 0.2 || currentMoney == 0.5 || currentMoney == 1 || currentMoney == 2) {
coins += currentMoney;
} else {
System.out.printf("Cannot accept %.02f", Double.parseDouble(input));
}
input = scanner.nextLine();
}
Благодаря и на двамата. Точно това е било проблема. Проверката трябва да се прави с double а не с текст.
Здравей, задачата работи и без BigDecimal.
Промени кода си да изглежда по този начин и ще вземеш 100/100.
cmd = sc.nextLine();
text = cmd.toLowerCase();
while (!text.equals("start")) {
if (Double.parseDouble(text) == 0.1 || Double.parseDouble(text) == 0.2 || Double.parseDouble(text) == 0.5 || Double.parseDouble(text) == 1 || Double.parseDouble(text) == 2) {
money = money.add(BigDecimal.valueOf(Double.parseDouble(text)));
} else {
System.out.printf("Cannot accept %.2f\n", Double.parseDouble(cmd));
}
cmd = sc.nextLine();
text = cmd.toLowerCase();
}
Като цяло проблема май идва, че проверяваш числата като String, а не като число.
Можеш да оправиш кода още, като:
case ("water"): {
if (money.compareTo(waterPrice) < 0) {
System.out.println("Sorry, not enough money");
} else {
System.out.println("Purchased " + cmd);
money = money.subtract(waterPrice);
}
break;
}
Няма нужда от 2 пъти да пишеш break;
Ето и моя код дава ми само 71%.
https://pastebin.com/jMcHvM73
Привет,
Реших да използвам Hashtable за решението. Скъса ми нервите докато разбера как се обхожда таблица.
Чудя се има ли по лесен начин да се създаде обект с key и value, който да се обхожда чрез индекс.
import java.util.*;
public class Vending_Machine {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str;
double money = 0.0;
Dictionary <String, Double> dic = new Hashtable<String, Double>();
dic.put("Nuts", 2.0);
dic.put("Water", 0.7);
dic.put("Crisps", 1.5);
dic.put("Soda", 0.8);
dic.put("Coke", 1.0);
while (true) {
String input = scanner.nextLine();
if (input.equals("Start")) break;
double in = Double.parseDouble(input);
if (in != 0.1 && in != 0.2 && in != 0.5 && in != 1.0 && in != 2.0) System.out.printf("Cannot accept %.2f \n", in);
else money+= in;
}
while (true) {
Enumeration enu = dic.keys();
String input = scanner.nextLine();
if (input.equals("End")) break;
if (((Hashtable<String, Double>) dic).containsKey( input ) == false) System.out.println("Invalid product");
while (enu.hasMoreElements()) {
str = (String) enu.nextElement();
if (str.equals(input) && money - dic.get(str) >= 0) {
money -= dic.get( str );
System.out.printf( "Purchased %s \n", input );
} else if (str.equals(input) && money - dic.get(str) < 0) {
System.out.println("Sorry, not enough money");
}
}
}
System.out.printf("Change: %.2f", money);
}
}
Заимствах от колежката с флаговете по-горе и взе, че ми се получи и на мен...
import java.util.Scanner; public class JF_7_Vending_Machine_1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String command = scanner.nextLine(); double sum = 0; while (!"Start".equals(command)) { double coins = Double.parseDouble(command); if (coins == 0.1) { sum += coins; } else if (coins == 0.2) { sum += coins; } else if (coins == 0.5) { sum += coins; } else if (coins == 1) { sum += coins; } else if (coins == 2) { sum += coins; } else { System.out.println(String.format("Cannot accept %.2f", coins)); } command = scanner.nextLine(); } String good = scanner.nextLine(); double price = 0; boolean isGood = false; while (!"End".equals(good)) { switch (good) { case "Nuts": price = 2.0; isGood = true; break; case "Water": price = 0.7; isGood = true; break; case "Crisps": price = 1.5; isGood = true; break; case "Soda": price = 0.8; isGood = true; break; case "Coke": price = 1.0; isGood = true; break; } if (sum < price) { System.out.println("Sorry, not enough money"); } else if (isGood) { System.out.println(String.format("Purchased %s", good)); sum -= price; } else { System.out.println("Invalid product"); } good = scanner.nextLine(); } System.out.println(String.format("Change: %.2f", sum)); } }
Здравей !
Може ли да пуснеш следната проверка на твоя код ?
1
1
0.5
0.6
Start
Coke
ERROR
ERROR
End
Purchased ERROR ?????
След като задачата ти минава в джъдж , значи има грешка в джъджа !!!
Нека и другите да коментират .
Проверих току що кода ти и наистина минава с тази абсурдна грешка !
Моля да коригирате джъджа !
При 100/100 показва неминаващ нулев тест и при моето и при твоето решение !
Моля да коригирате и това !
В default case трябва да имаш проверка за некоректно подаден продукт ....
и тогава булевата ти променлива да става false