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
38 changes: 38 additions & 0 deletions src/main/java/Calculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import java.util.Scanner;
public class Calculator {
double sum = 0;
String list = "";
int i = 0;

void sum(){
while(true) {
Scanner scanner = new Scanner(System.in);
System.out.println("Введите название товара или напишите слово \"Завершить\" чтобы закончить работу программы.");
String name = scanner.nextLine();
if (name.equalsIgnoreCase("завершить")) {
scanner.close();
break;
}
while(true){
System.out.println("Введите стоимость " + name + ".");
if (scanner.hasNextDouble()){
double price = scanner.nextDouble();
if(price>0){
Formatter formatter = new Formatter(price);
formatter.ruble(price);
i += 1;
sum = sum + price;
String price2 = String.format("%.2f", price);
list = list + i + ". "+ name + " - " + price2 +" "+ formatter.rub +".\n";
break;
}
System.out.println("Введена неправльная цена товара!");
}
else {
System.out.println("Введена неправльная цена товара!");
scanner.next();
}
}
}
}
}
60 changes: 60 additions & 0 deletions src/main/java/Formatter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
public class Formatter {
double i;
String rub;

Formatter(double i){
this.i = i;
}

void ruble(double i){
int i2 = (int)Math.floor(i)%100;
switch(i2){

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Не правильное склонение у чисел больше 20
image
Надо проверять последнюю или 2 последних цифры числа, в зависимости от ситуации, чтобы правильно определить склонение. Есть несколько случаев, которые нужно проверить, когда заканчивается на:

  • 0
  • 1
  • 2-4
  • 5-9
  • и исключение, когда 2 цифры в конце надо проверять 11-14

case 21:
case 31:
case 41:
case 51:
case 61:
case 71:
case 81:
case 91:
case 1:{
rub = "рубль";
break;
}
case 2:
case 22:
case 32:
case 42:
case 52:
case 62:
case 72:
case 82:
case 92:
case 3:
case 23:
case 33:
case 43:
case 53:
case 63:
case 73:
case 83:
case 93:
case 4:
case 24:
case 34:
case 44:
case 54:
case 64:
case 74:
case 84:
case 94:{

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⏫ Среда разработки предложила немного укороченный вариант

switch (i2) {
    case 21, 31, 41, 51, 61, 71, 81, 91, 1 -> {
        rub = "рубль";
        break;
    }
    case 2, 22, 32, 42, 52, 62, 72, 82, 92, 3, 23, 33, 43, 53, 63, 73, 83, 93, 4, 24, 34, 44, 54, 64, 74, 84, 94 -> {
        rub = "рубля";
        break;
    }
    default -> {
        rub = "рублей";
        break;
    }
}

А вообще, конечно, будет компактнее и читабельнее, если не расписывать все варианты, а проверить взять % 100 и проверить окончание на 11-14, а потом взять % 10 и проверить окончание на 1 и 2-4, получится всего 3 ветки компактно, а в остальных случаях выводить "рублей".

rub = "рубля";
break;
}
default:{
rub = "рублей";
break;
}
}
}
}
37 changes: 33 additions & 4 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,35 @@

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
Scanner scanner = new Scanner(System.in);
Calculator sum = new Calculator();
int people;
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.

⏫ Я бы сделал чтение количества людей отдельным методом, раз оно так хорошо отделяется. И тем самым можно разгрузить основнйо метод

System.out.println("На сколько людей разделить счет?");
if(scanner.hasNextInt()){
people = scanner.nextInt();
if(people > 1){
break;
}
System.out.println("Введено некоректное количество людей!\nПопробуйте ещё раз!");
}
else{
System.out.println("Введено некоректное количество людей!\nПопробуйте ещё раз!");
scanner.next();
}
}
sum.sum();
if(sum.i != 0){
Formatter formatter = new Formatter(0);
formatter.ruble(sum.sum/people);
String zxc = String.format("%.2f", (sum.sum/ people));
System.out.println("Добавленные товары:\n"+sum.list);
System.out.println("Сумма которую должен заплатить каждый - "+zxc+" "+ formatter.rub+".");
scanner.close();
}
else {
System.out.println("Вы не добавили ни одного товара.");
scanner.close();
}
}
}