Skip to content

Яндекс практикум, консольное приложение № 1 - #1

Open
alexmitchenko wants to merge 4 commits into
mainfrom
master
Open

alexmitchenko wants to merge 4 commits into
mainfrom
master

Conversation

@alexmitchenko

Copy link
Copy Markdown
Owner

Версия 1.0

return "рубль";
} else
return "рублей";
}

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 - else if - else можно ещё заменить конструкцией switch-case

Comment thread src/main/java/Main.java
}
else {
System.out.print("Ошибка: неверный ввод!\n");
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Можно убрать этот блок с else, выводить сообщение "Ошибка: неверный ввод!" в конце while вне всех if-else - так можно сократить и оптимизировать этот блок

@faritowich

Copy link
Copy Markdown

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

@alexmitchenko

alexmitchenko commented Nov 28, 2022 •

Copy link
Copy Markdown
Owner Author

Добрый день!

Я сделал новый комит.

Блок кода, отвечающий за выбор падежа валюты, не менялся. Была найдена и исправлена ошибка, которая могла в ряде случаев приводить к выводу неверного падежа валюты при выводе суммы, которую должен уплатить каждый участник. Вместо обработки значения shareRatio обрабатывалось значение totalPrice.

При выводе списка товаров с ценами все изначально обрабатывалось корректно.

Относительно предложенных доработок, вот вариант кода для упрощения блока ввода количества участников:

while (true) {
if (scanner.hasNextInt()) {
int input = scanner.nextInt();
if (input >= 2) {
peopleCount = input;
break;
}
}
System.out.print("Ошибка: неверный ввод!\n");
scanner.nextLine();
}

В итоге я не стал его использовать, поскольку обработка ввода визуально замедлилась, хотя и работает корректно. Вероятно, я не до конца понимаю, как работает класс scanner, в дальнейшем я попытаюсь упростить код, но пока сдаю программу, как есть.

Заменить if-else в блоке выбора падежа валюты c использованием switch-case я не смог, поскольку там сложное условие, сравнивающее две переменных, плюс java принимает в качестве case только значения, в результате реализация через несколько блоков switch-case на мой взгляд, только ухудшит восприятие и читаемость кода.

Если я не прав и вам не сложно, я бы посмотрел на пример реализации через switch-case.

Спасибо за ревью!

@alexmitchenko

Copy link
Copy Markdown
Owner Author

Что мне нужно сделать теперь чтобы сдать программу?
Отправить новый пул реквест или снова запросить проверку текущего?

Comment thread src/main/java/Main.java
goodPrice = input;
break;
} else {
System.out.print("Ошибка: неверный ввод!\n");

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

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.

Понял, благодарю!

@faritowich

Copy link
Copy Markdown

Заменить if-else в блоке выбора падежа валюты c использованием switch-case я не смог, поскольку там сложное условие, сравнивающее две переменных, плюс java принимает в качестве case только значения, в результате реализация через несколько блоков switch-case на мой взгляд, только ухудшит восприятие и читаемость кода.

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

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 "рублей";
         }
     }
 }

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