Shopping Lists проблем с тестовете

Здравейте,

Опитвам да реша задачата от заглавието, но ми връща - IR (java.lang.NumberFormatException) за всички unit тестове, без първият.
За форматиране ползвам следният код:

System.out.printf("%.2f", orderTotal);

Някой знае ли, как правилно да форматираме дабълите? Благодаря

EDIT: Оказа се, че грешката е, защото се опитвам да парсна стринг към число.

EDIT2: Някой може ли да ми каже, какъв 2-рия тест? Искам да видя, какво пропускам, че да ми хвърля такава грешка. Опитах и с regex, в случай, че имената на продуктите са от повече от 2 думи. Може да са и от 1000 думи. Няма да има проблем. Обаче с regex направо ми каза WA на всички тестове без първия.

Здравей, Станислав,
Можеш ли да споделиш регулярния израз, който използваш? Не зная дали ще мога да помогна с този подход - аз използвам последна позиция на интервала при обработването на списъка с цените, и опит за четене на цяло число в началото на всяка инструкция от списъците с покупките (ако опитът се провали, числото се приема за 1). По този начин вторият тест и следващите тестове, за които досега ми е стигало времето за изпълнение, минават.
Поздрави,
Иван

Здрасти,

Pattern productPattern = Pattern.compile("([a-zA-Z ]+)([0-9\\.]+)");

Това е за продуктите, когато ги записвам в HashMap.

                Pattern manyProductCountPattern = Pattern.compile("(\\d) ([a-zA-Z ]+)");
                Pattern oneProductCountPattern = Pattern.compile("([a-zA-Z ]+)");

Това са двата случая, когато нямам посочено количество от продукта (т.е. бройката е една) или когато имам повече от една.

Регулярният израз "(\\d) ([a-zA-Z ]+)" допуска само една цифра, последвана от интервал, като начало на стринга, което ще бъде проблем, ако количествата на продуктите са многоцифрени числа.

Прав си. Обаче пак не мина. На мен това ми е логиката за сплит на поръчка с точната бройка, като използвам след това да намеря цената и да умножа по количеството:

for (int j = 0; j < orderProducts.length; j++) {

                String[] orderTokens = orderProducts[j].split(" ");

                String orderProductName = "";
                int orderProductCount = 1;

                if (orderTokens.length == 3){
                    orderProductName = orderTokens[1] + " " + orderTokens[2];
                    orderProductCount = Integer.parseInt(orderTokens[0]);
                } else if (orderTokens.length == 2){

                    Pattern pattern = Pattern.compile("\\d+");
                    Matcher matcher = pattern.matcher(orderTokens[0]);

                    if (matcher.matches()){
                        orderProductCount = Integer.parseInt(orderTokens[0]);
                        orderProductName = orderTokens[1];
                    } else {
                        orderProductName = orderTokens[0] + " " + orderTokens[1];
                    }

                } else if (orderTokens.length == 1){
                    orderProductName = orderTokens[0];
                }

                if (products.containsKey(orderProductName)){

                    Double productPrice = products.get(orderProductName);

                    orderTotal += productPrice * orderProductCount;
                }
            }

Вижда се, че допускам, че името на продукта е от най-много две думи. Не знам вече, какво точно пропускам.

А какво става, ако е от повече? :slight_smile: