Skip to content

Проектная работа 1, Игорь Зацепилин 4я когорта Android-разработчик#1

Open
IgorZatsepilin wants to merge 5 commits intomainfrom
master
Open

Проектная работа 1, Игорь Зацепилин 4я когорта Android-разработчик#1
IgorZatsepilin wants to merge 5 commits intomainfrom
master

Conversation

@IgorZatsepilin
Copy link
Copy Markdown
Owner

Проектная работа 1, Игорь Зацепилин 4я когорта Android-разработчик


System.out.println("Введите стоимость товара в формате: 'рубли.копейки' [10.45, 11.40]");
double price = scanner.nextDouble();
} while (peopleAmount <= 1); // окончание цикла ввода и проверки кол-ва человек
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше выносить такие большие логические блоки типа ввода и обработки количества людей, расчета стоимости продукта, вывода результата в отдельные методы, потому что один сплошной код в методе main снижает читаемость кода.

peopleAmount = scanner.nextInt();
if (peopleAmount == 1) {
System.out.println("Ошибка! Количество человек не может быть равно 1, так как в этом случае нет смысла ничего считать и делить.");
System.out.println("Введите корректное число. На скольких человек необходимо разделить счёт?");
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Такие подряд идущие println лучше объединять в один вызов println, делая перенос строки при помощи \n

Scanner scannerPrice = new Scanner(System.in);
while (!scannerPrice.hasNextDouble()) { //проверка на корректность введенного формата Дробное значение
System.out.println("Введенное значение некорректно.");
System.out.println("Введите стоимость товара в формате 'рубли.копейки', например, '10.45':");
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Одинаковые повторяющиеся строки типа этой лучше выносить в отдельную переменную и подставлять её там, где нужно - это избавить от нужны менять при необходимости все строки по одной.

newProduct.sumPerPerson = 130; // вычисляем сумму на человека
//определяем падеж слова "рубль":
newProduct.padezh = Product.definePadezh(newProduct.sumPerPerson, newProduct.twoLastDigits, newProduct.oneLastDigit, newProduct.bezDrobnoyInt);
System.out.println("Сумма, которую должен заплатить каждый человек, равна: " + String.format("%.2f", newProduct.sumPerPerson) + newProduct.padezh);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Таких огромных фрагментов кода тоже стоит избегать

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

каких именно огромных фрагментов? Ты про вывод строки с одной надписью и двумя переменными? Мне кажется я наоборот максимально упростил здесь код, разве нет?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тесты можно вынести в отдельный метод, например, и вызывать в main.

padezhVar = 3;;
}

if ((twoLastDigits > 4) & (twoLastDigits < 21)) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вместо длинной вереницы if'ов лучше также использовать конструкцию switch-case

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

в данном случае использование switch невозможно, так как в case нельзя передать диапазон значений <>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В таком виде да, но можно написать метод, в который мы просто передаем уже округленную сумму, например так:

public static String changeCase(int price) {
       if ((price% 100) >= 11 && (price% 100) <= 14) {
           return "рублей";
       } else {
           switch (amount % 10) {
               case 2:
               case 3:
               case 4:
                   return "рубля";
               case 1:
                   return "рубль";
               default:
                   return "рублей";
           }
       }
   }

}


return " error.";
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше перенести в качестве default значения в switch-case:

                    default:
                        return " error.";

Также рекомендую после написания каждого фрагмента кода использовать хоткей Alt + Ctrl + L - он форматирует код, приводя его к единому красивому формату

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants