@Sawayadi

Как превратить код в класс с «особенностями»?

Есть код, который запрашивает ввести имя и фамилию человека и его день рождение(в трех цифрах) и потом определяет знак зодиака
import java.util.Scanner; 

public class Main
{
 public static void main(String[] args) {
          Scanner in = new Scanner(System.in);       
                int m, d, y, n, f;
                String z=" ";        
                System.out.print("Ведите имя и фамилию: ");
                String name = in.nextLine();
                System.out.println("Скажите день рождения");       
                d=in.nextInt();
                System.out.println("Скажите месяц рождения");       
                m=in.nextInt();   
                System.out.println("Скажите год рождения");       
                y=in.nextInt(); 
            switch (m) {
    case 1:
        if (d <= 19)
            z = "Козерог";
        else
            z = "Водолей";
        break;
    case 2:
        if (d <= 18)
            z = "Водолей";
        else
            z = "Рыбы";
        break;
    case 3:
        if (d <= 20)
            z = "Рыбы";
        else
            z = "Овен";
        break;
    case 4:
        if (d <= 19)
            z = "Овен";
        else
            z = "Телец";
        break;
    case 5:
        if (d <= 20)
            z = "Телец";
        else
            z = "Близнецы";
        break;
    case 6:
        if (d <= 21)
            z = "Близнецы";
        else
            z = "Рак";
        break;
    case 7:
        if (d <= 22)
            z = "Рак";
        else
            z = "Лев";
        break;
    case 8:
        if (d <= 22)
            z = "Лев";
        else
            z = "Дева";
        break;
    case 9:
        if (d <= 22)
            z = "Дева";
        else
            z = "Весы";
        break;
    case 10:
        if (d <= 22)
            z = "Весы";
        else
            z = "Скорпион";
        break;
    case 11:
        if (d <= 22)
            z = "Скорпион";
        else
            z = "Стрелец";
        break;
    case 12:
        if (d <= 21)
            z = "Стрелец";
        else
            z = "Козерог";
        break;
        }
        System.out.println(name+" дата рождения: "+d+"."+m+"."+y);
        System.out.println("Знак зодиака: "+z);
 }
}

Надо превратить его в класс(название "Zodiac"), в котором есть особенности:
-Данные кода должны быть с спецификатором "private"
В классе public должны быть:
-Input();
-Output();
-Свойства для доступа к полей класса;
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 1
@azerphoenix
Здравствуйте!
Рекомендую прежде всего изучить основы ООП и Java разработки.

Данные кода должны быть с спецификатором "private"

Это называется инкапсуляцией и является одним из основ ООП.

Не рекомендуется использование подобного рода конструкций, так как они усложняют восприятие кода. Рекомендую дополнительно изучить рефакторинг. (refactoring.guru)
Код
switch (m) {
    case 1:
        if (d <= 19)
            z = "Козерог";
        else
            z = "Водолей";
        break;
    case 2:
        if (d <= 18)
            z = "Водолей";
        else
            z = "Рыбы";
        break;
    case 3:
        if (d <= 20)
            z = "Рыбы";
        else
            z = "Овен";
        break;
    case 4:
        if (d <= 19)
            z = "Овен";
        else
            z = "Телец";
        break;
    case 5:
        if (d <= 20)
            z = "Телец";
        else
            z = "Близнецы";
        break;
    case 6:
        if (d <= 21)
            z = "Близнецы";
        else
            z = "Рак";
        break;
    case 7:
        if (d <= 22)
            z = "Рак";
        else
            z = "Лев";
        break;
    case 8:
        if (d <= 22)
            z = "Лев";
        else
            z = "Дева";
        break;
    case 9:
        if (d <= 22)
            z = "Дева";
        else
            z = "Весы";
        break;
    case 10:
        if (d <= 22)
            z = "Весы";
        else
            z = "Скорпион";
        break;
    case 11:
        if (d <= 22)
            z = "Скорпион";
        else
            z = "Стрелец";
        break;
    case 12:
        if (d <= 21)
            z = "Стрелец";
        else
            z = "Козерог";
        break;
        }
        System.out.println(name+" дата рождения: "+d+"."+m+"."+y);
        System.out.println("Знак зодиака: "+z);
 }


int m, d, y, n, f;
Всегда используйте понятные названия. Например, day, year, month и т.д.
Вы можете например, вместо того, чтобы отдельно принимать день, месяц и год, принять сразу дату. Например, в формате - dd/mm/yyyy, а затем уже спарсить эту строку в Date.
А далее уже проверять входит ли дата рождения человека в соответствующий зодиаку промежуток даты
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
XCritical Software Санкт-Петербург
До 370 000 ₽
MediaSoft Ульяновск
от 80 000 до 150 000 ₽
от 180 000 до 210 000 ₽
29 окт. 2020, в 03:40
4000 руб./за проект
29 окт. 2020, в 03:23
400 руб./в час
29 окт. 2020, в 02:05
3000 руб./за проект