Repository navigation
Conversation
…ограмма не очень аохожа на программу программиста, но я обдумывал это решение до пол 2-го ночи, вроде даже реально похоже на подобие норм программы.
|
|
||
| try { | ||
| // вызывал конструктор parseDouble типа Double и перевожу строку в double | ||
| // Сам я не додумался, а за меня додумался интернет |
There was a problem hiding this comment.
Это норма) Главное уметь искать и понимать, что ты нашел)
|
|
||
| public static double sumPrice(HashMap <String, Double> productsMap){ | ||
| double sumPriceResult = 0.00f; | ||
| for (Object i: productsMap.keySet()) { |
There was a problem hiding this comment.
Так как у мапы тип ключей String, то вместо Object было бы корректнее сразу написать String
| if (floor(price) == 1.00 || floor(price) == 1.0) { | ||
| return "рубль"; | ||
| } | ||
| return "рубля"; |
There was a problem hiding this comment.
Есть несколько случаев:
- Оканчивается на 1- рубль
- 3-4 - рубля
- 0, 5-9, 11 - 19 - рублей
| I'm so sorry | ||
|
|
||
| ## | ||
| ## Calculator vashego nastorenia version 0.3 |
|
|
||
| while (humans <= 1) { | ||
| System.out.print("Введите количество гостей "); | ||
| humans = scanner.nextInt(); |
There was a problem hiding this comment.
Если ввести не интовое значение, то упадет. Нужно либо оборачивать в try-catch, либо проверять ввод через метод scanner.hasNextInt()
| Formatter formatter = new Formatter(); | ||
| double productsSum = 0.00f; | ||
| double productPrice = 0.00f; | ||
| HashMap<String, Double> productsMap = new HashMap<String, Double>(); |
There was a problem hiding this comment.
Отличный вариант использовать мапу)
| // Сам я не додумался, а за меня додумался интернет | ||
| productPrice = Double.parseDouble(scanner.next()); | ||
| if (productPrice > 0) { | ||
| productsMap.put(productName, productPrice); |
There was a problem hiding this comment.
Здесь съехало форматирование, должен быть сдвинут на таб блок. Поможет комбинация ctrl + alt + L или cmd + opt + L
| System.out.println("Добавленные товары:\n"); | ||
| for (String i : productsMap.keySet()) { | ||
| System.out.printf("Товар \"%s\" стоимостью \"%s\" %s\n", i, | ||
| productsMap.get(i).toString().replace(",", "."), |
There was a problem hiding this comment.
В русском языке разделитель дробной и целой части запятая, в английском точка. Раз мы общаемся на русском, то можно было оставить запятую)
| productsMap.put(productName, productPrice); | ||
| System.out.println("Товар успешно добавлен\n"); | ||
|
|
||
| System.out.print("Желаете добавть ещё товар? \n"); |
| wishQuestion.equalsIgnoreCase("нет")) { | ||
| System.out.println("Добавленные товары:\n"); | ||
| for (String i : productsMap.keySet()) { | ||
| System.out.printf("Товар \"%s\" стоимостью \"%s\" %s\n", i, |
There was a problem hiding this comment.
Чтобы слегка облегчить метод и улучшить читаемость, все эти принты можно было бы вынести в отдельный метод
| } | ||
| return "рубля"; | ||
| // Это студия такой красивый формат(котлин стайл) | ||
| // привела, сам не догадался =( |
There was a problem hiding this comment.
Все приходит с опытом) Потом привыкнешь и уже будет у самого глаза болеть от кривого форматирования))
| return "рубля"; | ||
| // Это студия такой красивый формат(котлин стайл) | ||
| // привела, сам не догадался =( | ||
| return switch ((int) floor(price)) { |
There was a problem hiding this comment.
Чтобы проверить правильно окончание, следует посчитать два значения: 1) Последнюю цифру числа - это остаток от деления на 10, то есть price % 10. 2) Последние две цифры - это остаток деления на 100: price % 100.
Далее первым делом надо проверить, входит ли остаток от деления на 100 в диапазон 11-19. Это тот случай, когда будет рублей.
Потом проверяем остаток деления на 10. Если 1 - это рубль (чтобы учесть случаи, когда число кончается на 1: 21, 31, 101 и тд). Если 2-4 - рубля. И остальное будет рублей
There was a problem hiding this comment.
про деление по модулю знаю, использовал, тут не стал по невнимательности.
и не учёл про то, что цена может быть больше 19-ти рублей
| if (humans < 1) { | ||
| System.out.println("Счёт не делится на такое количество человек.\n" + | ||
| "Введите корректное число людей"); | ||
| try { |
| formatter.Formatter(productsSum)); | ||
| System.out.printf("Каждый посетитель должен заплатить %.2f %s \n", | ||
| Calculator.priceForPerson(productsMap, humans), | ||
| //Насколько правильно вызвать функцию, в которой вызывается функция? <------ |
There was a problem hiding this comment.
Да в целом так делают) Если выражение не становится супер сложным и длинным
| int modPrice = (int) (floor(price)); | ||
| //это хотфикс, потом понял, где неправильно | ||
| // и в итоге не смог быстро всё пофиксить по нормальному | ||
| if (modPrice % 100 > 11 && modPrice % 100 < 15) |
There was a problem hiding this comment.
Ну вообще можно было просто сохранить mod 10, mod 100, а потом в свитч кейсе сначала мод 100 проверить на 11-15, а потом мод 10 на все остальное
| } | ||
| } catch (Exception e) { | ||
| System.err.println("Ёкарный бабай, шнурок, целое число больше одного введи"); | ||
| // Как понял из описаний в интернетах, из-за того, что первый раз мы вводим неправильный |
| } else { | ||
| System.out.println("Ёкарный бабай, шнурок, когда последний раз за " + | ||
| "твой кофе заправка платила?"); | ||
| //Моя девушка сказала, раз эт неправильно, то почему оно не красится=) |
There was a problem hiding this comment.
Ничесе, я такого варианта еще не встречала в этой работе)) Девушке респект

No description provided.