Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 110 additions & 1 deletion src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,115 @@
/*
«Калькулятор счёта» — консольное приложение,
которое будет задавать вопросы в консоли,
считывать пользовательский ввод
и в результате показывать
список товаров и сумму для каждого из друзей.
*/

import java.util.Scanner;
public class Main {
private static final Scanner scanner = new Scanner(System.in);

public static void main(String[] args) {
System.out.println("Hello world!");
/*
После запуска программа должна спрашивать у пользователя,
на скольких человек необходимо разделить счёт.
*/

int k;

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 главе книги Роберта Мартина "Чистый код". Также на хабре есть краткий конспект книги: https://habr.com/ru/post/485118/

System.out.println("Укажите, на скольких человек делим счет:");
if (scanner.hasNextInt()) {
k = scanner.nextInt();
while (k <= 1) {
System.out.println("Количество человек должно быть больше 1, укажите другое значение:");
if (scanner.hasNextInt()) {
k = scanner.nextInt();
} else {
System.out.println("Укажите количество целой цифрой, без этого калькулятор не будет работать."); return;
}
}
System.out.println("Замечательно! Количество человек - " + k +"\n\nТеперь укажи товары и их цены. Или напиши 'завершить' для рассчета.");
} else {
System.out.println("Укажите количество целой цифрой, без этого калькулятор не будет работать."); return;
}


/*
класс - в итоге вынесла отдельно, тк должен быть класс кроме Main

class Sku {
String name; //название товара
double price; //цена товара
public static int goodsCount;

//теперь делаем конструктор для товара
Sku(String nameSKU, double priceSKU){
name = nameSKU;
price = priceSKU;
goodsCount++;
}
}
*/

String end = "завершить";
String text = "";
Double pr = 0.0;
String list = "";
Double sum = 0.0;


while (!text.equalsIgnoreCase(end)) {
System.out.println("Товар, например, 'Тыквенный раф' -");
scanner.nextLine();
text = scanner.nextLine();
if (text.equalsIgnoreCase(end)) {break;}
list = list + "\n" + text;
System.out.println(text + " - записали\n");

System.out.println("Цена, например, '150,10' - ");
if (scanner.hasNextDouble()) {
pr = scanner.nextDouble();
while (pr < 0) {
System.out.println("!! Цена должна быть положительным числом. Укажите новую цену.");
pr = 0.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.

pr = 0.0 - лишнее. В следующей строчке переприсваиваем

pr = scanner.nextDouble();
}
sum = sum + pr;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Есть короткая конструкция sum += pr;

System.out.println(pr + " - ок, посчитали\n");
} else {
System.out.println("!! Укажите цену цифрами, для разделения используй запятую.\nНазвание товара укажи заново.\n");
}
Sku sku = new Sku(text, pr);

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 (list.equals("")) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Можно заменить на list.isEmpty

System.out.println("Ничего не заказано"); return;
}


System.out.println("\n****\nСписок всех товаров:" + list.substring(0, list.length()) + "\n");
System.out.println("Общая сумма: " + sum + " Количество человек: " + k + "\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.

Такие подряд идущие println можно объединить в один.

Double pay = sum / k;
String payment = String.format("%.2f", pay);
String rub = "";

switch (payment.substring(payment.length()-4,payment.length()-3)) {
case "1":
rub = "рубль";
break;
case "2":
case "3":
case "4":
rub = "рубля";
break;
default:
rub = "рублей";
break;
}


System.out.println("Сумма на каждого: " + payment + " " + rub + "\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.

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



}
}
12 changes: 12 additions & 0 deletions src/main/java/Sku.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
public class Sku {
String name; //название товара
double price; // цена товара
public static int goodsCount;

//теперь делаем конструктор для товара
Sku(String nameSKU, double priceSKU){
name = nameSKU;
price = priceSKU;
goodsCount++;
}
}