Skip to content

Домашнее задание Спринт №2 29/12/22#1

Merged
sn00pg0d merged 16 commits intodevfrom
main
Jan 6, 2023
Merged

Домашнее задание Спринт №2 29/12/22#1
sn00pg0d merged 16 commits intodevfrom
main

Conversation

@sn00pg0d
Copy link
Copy Markdown
Owner

No description provided.

// вы не должны ограничиваться только классом Main и можете создавать свои классы по необходимости
System.out.println("Привет Мир");
Counter counter = new Counter();
counter.shopCalc(); // запуск кол-ва человек и калькулятора корзины
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⏫ Так как функция shopCalc статическая, то для обращения к ней не требуется экземпляр класс. Можно заменить обе строки на Counter.shopCalc();

int persons = 0;
System.out.println("Введите количество человек");
while (persons <= 1) {
persons = scanner.nextInt();
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Так как здесь все время читается int, то при некорректном вводе, например, букв или не целого числа, приложение упадет.


public class Counter {
// создал класс как считалку, чтобы не захламлять main, но устроил бедлам здесь
// после автовыравнивания (альт + ктрл + L) стало немного получше
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 class Counter {
// создал класс как считалку, чтобы не захламлять main, но устроил бедлам здесь
// после автовыравнивания (альт + ктрл + L) стало немного получше
// да-да.. тему "Декомпозиция" я вообще не усвоил, а сейчас боюсь тут всё менять, сдам так В)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

а это не очень(

// я честно не понял как сделать через floor(), мы разве проходили такое?
// пришлось гуглить как перевести цифры в строку и обратно
String rubles = String.valueOf(otvet);
if (rubles.endsWith("0")) { // endsWith нашел в контекстном меню, хз что это но сработало -_-
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Чтобы правильно склонять, нужно делать больше проверок, не только на 0

int persons = pers();
System.out.println("Выберите себе игрушку из списка:");
System.out.println("1 - iPhone X\n2 - iPad 8\n3 - iPods 3\n0 или Завершить - Выход");
while (price != -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.

⏫ Так как условие price != -1 выполняется всегда и никогда не произойдет обратного, то можно просто while (true)

break;
}
double bWord = Double.parseDouble(String.valueOf(rubles));
System.out.println(String.format("Каждый из вас должен заплатить: %.2f рубль\n", bWord));
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⏫ Можно заменить на System.out.printf и в других местах тоже

double price = 0;
int persons = pers();
System.out.println("Выберите себе игрушку из списка:");
System.out.println("1 - iPhone X\n2 - iPad 8\n3 - iPods 3\n0 или Завершить - Выход");
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Пользователь должен сам вводить любое название товара и любую стоимость (почти любую, стоит учитывать отрицательные)

⏫ Можно еще учитывать, чтобы при вводе цены товара копейки составляли 2 знака после запятой: 10,15 - можно, 10,1533 - некорректный ввод.

@sn00pg0d sn00pg0d merged commit ed1051e into dev Jan 6, 2023
public static double enterPrice() { // ввод стоимости товара
Scanner scanner = new Scanner(System.in);
System.out.println("ВВедите стоимость товара:");
if (scanner.hasNextDouble()) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Не хватает проверок на отрицательную цену и 0

}
// конец

// принтф - прикольно конечно, но читать как-то не очень удобно, в отличии от нескольких принтлн
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Так можно было несколько printf сделать) Смысл был убрать String.format в каждом вызове

int rublSum = (int) Math.floor(sum);
String rublStr = String.valueOf(rublSum);
if ((rublStr.endsWith("2")) || (rublStr.endsWith("3")) || (rublStr.endsWith("4"))) {
rubleySumma = "рубля";
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Числа 12, 13, 14 успешно попадают в это условие и склоняются не верно. И тоже самое для Ответа ниже
Стоит брать последние 2 цифры результата и проверять на то, что это лежит в пределе 5-19 (рублей), и если нет, то уже проверять просто последнюю цифру: 0 рублей, 1 рубль, 2-4 рубля и остальное - рублей. Вроде, как-то так, но лучше перепроверить меня)


public static String enterName() { // ввод названия товара
Scanner scanner = new Scanner(System.in);
while (true) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Тут, кстати, нет необходимости в цикле. Здесь всегда одна итерация, которая завершается return

System.out.println("Закрытие программы");
//break;
System.exit(0); // break не закрывает программу, а возобновляет цикл видимо изза return enterName()
} // буду благодарен, если подскажите как гасить приложуху без System.exit() :)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

В данной реализации можно попробовать сделать глобальный флаг, который будет проверятся во внешнем цикле и в нем уже будет вызываться break. А здесь устанавливать его в true и делать 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