Repository navigation
Conversation
… старалась и много узнала, пока делала проект. Не пинайте сильно;)
| @@ -0,0 +1,20 @@ | |||
| class CalculatorBill { | |||
| public void calc(double totalPrice, int i) { | |||
There was a problem hiding this comment.
Параметр i можно было бы назвать немного более точнее. Как я понимаю, это количество людей, верно?
| case 2: rub="рубля"; break; | ||
| case 3: rub="рубля";break; | ||
| case 4: rub="рубля";break; | ||
| case 11: rub="рублей";break; |
There was a problem hiding this comment.
Чуть выше ты вычисляешь последнюю цифру с помощью остатка от деления на 10. Максимально возможный вариант при этом - это цифра 9. То есть 10 и больше у тебя lastDigit никогда не будет, соответственно этот кейс и ниже никогда не произойдут. Может стоит взять не одну последнюю цифру?)
И если ты используешь версию java 12, то можно было бы совместить общие кейсы
| calculatorBill.calc(ProductAndPrice.totalPrice, i); | ||
| break; | ||
| } | ||
| if (i <= 1) { |
There was a problem hiding this comment.
Этот if можно опустить (об этом подсказывает ide), потому что при i > 1 будет выход из цикла, соответственно если программа спустилась ниже, то 100 процентов i <=1. Получается, что можно просто написать System.out.println("Некорректное значение для подсчета.");
|
|
||
| try | ||
| { | ||
| int i = Integer.parseInt(input); |
There was a problem hiding this comment.
И также хорошая практика давать имена такие, чтобы было понятно, для чего эта переменная/метод/класс и тд. Конкретно i принято использовать в при итерациях (проходах) в цикле (чаще всего по массивам и спискам)
| price = scanner.nextDouble(); | ||
| } | ||
|
|
||
| bill = bill.concat(productName).concat("\n"); |
There was a problem hiding this comment.
Немного съехало форматирование, поможет комбинация, которую я оставила в комментариях к ревью)
| } | ||
| System.out.println("Добавленные товары:" + "\n" + bill); | ||
| } | ||
| //public double getCurretnPrice() { |
There was a problem hiding this comment.
Хорошей практикой считается не оставлять закомментированного кода, так как он "загрязняет" код, делает его более длинным и хуже читаемым. Для хранения каких-то прошлых вариантов и существует гит :)
| if (answer.equalsIgnoreCase(stop)) { | ||
| break; | ||
| } else | ||
| continue; |
There was a problem hiding this comment.
continue тут избыточно, потому что цикл и так пойдет на новый круг, потому что там while(true)
| System.out.println("Введите название товара:"); | ||
| String productName = scanner.next(); | ||
| System.out.println("Введите стоимость товара (стоимость должна быть в формате XX.XX (рубли.копейки)):"); | ||
| double price = scanner.nextDouble(); |
There was a problem hiding this comment.
Если на этом этапе ввести не число (а букву, например), то выбросится исключение. Так как здесь у тебя нет блока try catch, то оно пробросится наверх. В методе main у тебя есть блок, там он перехватит это исключение, но при этом, так как мы попали в цикл в main, программа там и продолжит работу, из-за чего снова спросит нас, на сколько человек разделить счет

There was a problem hiding this comment.
А еще не очень красиво получается с null)
There was a problem hiding this comment.
И тут же будет забавная ситуация. В английском и русском языке разделителем у чисел с плавающей запятой являются разные символы. В английском языке это точка, а в русском запятая. То есть если у человека система на русском языке, то при вводе числа в формате xx.xx будет исключение, а при вводе xx,xx все пройдет хорошо. И наоборот соответственно) У вас в задание написано через точку, можно подумать, как получить число, не используя метод nextDouble, чтобы не было таких ситуация. (Например, если делить ввод по точке, а потом преобразовывать)
| double flooredpPp = Math.floor(payPerPerson); | ||
| String rub; | ||
| int lastDigit = (int) flooredpPp % 100; | ||
| if (11 <= lastDigit & lastDigit <= 19) { |
| } else | ||
| continue; | ||
|
|
||
| double getProductPrice(Scanner scanner) { |
There was a problem hiding this comment.
Где-то здесь есть интересный баг. Если сначала ввести некорректное число (например, отрицательное), а дальше ввести не число (слово), то приложение ловит ошибку InputMismatchException
Если провалить в метод nextDouble (нажать ctrl + click или cmd+click), то можно увидеть, что такое исключение выбрасывается, когда не может привестись к типу double. У тебя ошибка возникает из-за вложенного while, потому что если ввести некорректное число, мы в него попадем, а дальше уже можно вводить любые символы и из-за этого выбросится ошибка. Вариант исправления: Следует while (price <= 0) заменить на if (price <= 0), внутри которого написать ошибку и использовать continue, чтобы прервать текущую итерацию цикла while (true) и перейти к следующей сразу, без выполнения кода ниже




No description provided.