Conversation
src/main/java/Main.java
Outdated
| amount = 0; | ||
| sum = 0.0; | ||
| System.out.println("На скольких человек необходимо разделить счёт?"); | ||
| humans = scanner.nextInt(); |
There was a problem hiding this comment.
⚠ Если ввести вместо чисел строковое значение, то приложение "падает" с ошибкой. Лучше такого не допускать, а обрабатывать. Можно использовать методы scanner.hasNextInt()/hasNextFloat() в if else блоке или try-catch
src/main/java/Main.java
Outdated
| System.out.println("Введите значение заново?"); | ||
| humans = scanner.nextInt(); | ||
| } | ||
| while (!(s.equals("Завершить"))) { |
There was a problem hiding this comment.
🍏 Эта проверка !(s.equals("Завершить")) не будет иметь эффекта для цикла, т.к. такая же проверка производится внутри цикла:
if((s.equals("Завершить"))){
break;
}
Можно cделать так - while(true)
И, кстати, я тебе рекомендую вместо equals использовать equalsIgnoreCase, т.к. при equals надо учитывать регистр первого символа, в случае с equalsIgnoreCase - можно вводить "завершить" или "Завершить" и проверка будет пройдена
src/main/java/Main.java
Outdated
| d = scanner.nextDouble(); | ||
| price.add(d); |
There was a problem hiding this comment.
⚠ Здесь тоже лучше обработать ввод корректного значения
src/main/java/Main.java
Outdated
| System.out.println("Цена: "+price.get(i)+" рублей"); | ||
| sum = Double.sum(sum, (Double) price.get(i)); |
There was a problem hiding this comment.
⚠ Лучше выводить слово рубль с правильным окончанием в зависимости от суммы, т.е. если результат будет 2, то в консоль будет выведено 2,00 рублей.
Для правильной обработки окончания нужно учесть округленное в меньшую сторону значение без дробной части, и на что оно оканчивается: 1 - "рубль", 2-4 - "рубля", 5-9 (и 0) - "рублей". Плюс учесть, что для чисел 11-19 - "рублей" - для этого стоит проверять, что <число> % 100 между 11 и 19 включительно находится
src/main/java/Main.java
Outdated
| System.out.println(); | ||
| System.out.println("Сумма: "+sum+" рублей"); | ||
| System.out.println(); | ||
| System.out.println("На одного человека: "+(sum/humans)+" рублей"); |
| items = new ArrayList<String>(); | ||
| price = new ArrayList<Double>(); |
There was a problem hiding this comment.
🍏 В данном случае, можно сразу присвоить new ArrayList() при объявлении переменных
| double d=0.0; | ||
| String s = "Что-то"; |
There was a problem hiding this comment.
🍏 Сходу не понять по названиям, для чего эти переменные. Лучше стараться именовать осмысленными, но краткими названиями
| price = new ArrayList<Double>(); | ||
| double d=0.0; | ||
| String s = "Что-то"; | ||
| amount = 0; |
There was a problem hiding this comment.
🍏 Выше ноль для amount уже присвоен.
| while (!(bPrice)){ | ||
| try{ | ||
| d = scanner.nextDouble(); | ||
| bPrice=true; | ||
| } catch (InputMismatchException ex) { | ||
| System.out.println("Вы не ввели численное значение."); | ||
| scanner.next(); | ||
| } | ||
| } |
There was a problem hiding this comment.
🍏 Использование такого рода флагов, как bPrice, полезно. Но здесь кажется лишним. Все и так работает, если обойтись без неё, просто объявив while(true). Это было бы необходимо, если бы были какие-то промежуточные шаги цикла, на которых не нужен ввод цены продукта.
Аналогично, использование bPrice выше при вводе количества гостей, также выглядит излишним
В общем тут как удобно, но лучше стараться делать как проще)
| System.out.println("На одного человека: "+(yeah/humans)+rU(yeah/humans)); | ||
| } | ||
| String rU(double eternal){ | ||
| this.round=(int) eternal; |
There was a problem hiding this comment.
🍏 Можно обойтись локальной переменной, объявленной внутри метода
| if(this.round%100==11||this.round%100==12||this.round%100==13||this.round%100==14||this.round%100==15||this.round%100==16||this.round%100==17||this.round%100==18||this.round%100==19){ | ||
| return" рублей"; |
There was a problem hiding this comment.
🍏 Работает 👍
Можно еще проще - вычислить предпоследний знак, т.е. число 1 от 114.
Остаток от деления на 100 поделить на 10 (остаток от деления на 10 будет отброшен) и проверить на равенство 1.
| if(round%10==1){ | ||
| return " рубль"; | ||
| }else if(round%10==2||round%10==3||round%10==4){ | ||
| return " рубля"; | ||
| }else{ | ||
| return " рублей"; |
There was a problem hiding this comment.
🍏 Такую цепочку из if-then-else можно заменить на switch
No description provided.