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