Професионална програма
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 49 Точки

И на мен също ми дава 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 49 Точки

Благодаря и на двамата. Точно това е било проблема. Проверката трябва да се прави с 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 39 Точки

Привет,

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