Это проблема:
System.out.printf("Total value is: $%.2f\n" + totalValue);
Я думаю, вы имели в виду:
System.out.printf("Total value is: $%.2f\n", totalValue);
Другими словами, укажите значение для замены заполнителя вместо того, чтобы просто использовать конкатенацию строк для добавления значения к отправке строки формата.
В общем, когда вы получаете исключение, которое вы не понимаете, вы должны посмотреть документацию для него. В этом случае документы достаточно ясны :
Непроверенное исключение выдается, когда существует спецификатор формата, у которого нет соответствующего аргумента или если индекс аргумента ссылается на несуществующий аргумент.
Итак, есть две вещи, которые вы должны проверить в своем коде:
- У вас есть спецификатор формата без соответствующего аргумента?
- У вас есть индекс аргумента, который ссылается на несуществующий аргумент?
Вы не указали никаких индексов аргументов в строке формата, поэтому это должен быть первый случай - и это действительно так.