Loading...
ellyeqka avatar ellyeqka 3 Точки

https://pastebin.com/xZxmBZbi

 

Заповядай работещо и малко по-съкратено решение! ;)

0
27/09/2018 17:15:10
vikirina avatar vikirina 3 Точки

Здравей !

Може ли да пуснеш следната проверка на твоя код ?

1

1

0.5

0.6

Start

Coke

ERROR

ERROR

End

0
vikirina avatar vikirina 3 Точки

Purchased ERROR ?????

След като задачата ти минава в джъдж , значи има грешка в джъджа !!!

Нека и другите да коментират .

 

Проверих току що кода ти и наистина минава с тази абсурдна грешка !

Моля да коригирате джъджа !

При 100/100 показва неминаващ нулев тест и при моето и при твоето решение !

Моля да коригирате и това !

 

 

0
24/01/2019 13:36:15
vikirina avatar vikirina 3 Точки

В default case трябва да имаш проверка за некоректно подаден продукт ....

и тогава булевата ти променлива да става false

0
24/01/2019 13:22:43
SonixBG avatar SonixBG 50 Точки

И на мен също ми дава 85 точки и грешка в Test #5 (Incorrect answer). Как мога да видя входа на този тест?

Не виждам никакъв проблем в моя код https://pastebin.com/3cYNkD9U

0
mejapeja avatar mejapeja 1 Точки

SonixBG 

Според мен грешката ти е в първата част на кода.

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 и всичко ще се оправи.

0
BalioFVFX avatar BalioFVFX 40 Точки

Промени тази част от кода и ще ти даде 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();
        }

 

0
SonixBG avatar SonixBG 50 Точки

Благодаря и на двамата. Точно това е било проблема. Проверката трябва да се прави с double а не с текст.

0
BalioFVFX avatar BalioFVFX 40 Точки

Здравей, задачата работи и без 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;

0
29/09/2018 17:18:15
chaneto avatar chaneto -1 Точки

Ето и моя код дава ми само 71%.

https://pastebin.com/jMcHvM73

 

0
VasilK avatar VasilK 40 Точки

Привет,

Реших да използвам 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);

    }

}

0
27/01/2019 22:50:07
markopizzy avatar markopizzy 0 Точки

Заимствах от колежката с флаговете по-горе и взе, че ми се получи и на мен...

 

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));

    }
}

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