java помогите решить задачу с помощью switch

234
27 октября 2017, 11:10

помогите пожалуйста решить данную задачу в java, не совсем понятно как её реализовать через switch. Задача: В восточном календаре принят 60-летний цикл, состоящий из 12-летних подциклов, обозначаемых названиями цвета: зеленый, красный, желтый, белый и голубой. В каждом подцикле годы носят названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. По номеру года определить его название, если 1984 год — начало цикла: «год зеленой крысы». Примеры:

Введите год: 2012
Ответ: дракон, голубой 
Введите год: 1956
Ответ: обезьяна, красный
Answer 1

Если вам обязательно через switch то как-то так:

int year = 2016;
int deltaYear = year % 60; //откинем все прошедшие циклы
int colorYear = deltaYear % 12; // какой сейчас цвет
String color;
switch(colorYear){
    //кейсы по цветам
    // color = "цвет";
}
int animalYear = deltaYear / 12; // какое сейчас животное
String animal;
switch(animalYear ){
    //кейсы по животным
    // animal = "животное";
}
return animal + ", " + color;

Но я согласен, что проще завести массивы с цветом и животным и просто вытащить по индексу.

Answer 2

Шаг 1: На основе года определяете его позицию в 60 летнем цикле.

Например введен 1998 год, его позиция будет 14.

Шаг 2: Определяете, в каком интервале он находится

Примерно

     Если меньше 12 то зеленый
     Если меньше 24 то красный
     Если меньше 36 то желтый
     ...

Для примера выше он будет красным.

Шаг 3: Берете остаток от деления на 12, и получаете позицию года в 12 летнем цикле Примерно:

   Если 1 то крыса
   Если 2 то корова
   Если 3 то тигр
   ...

PS
Сознательно не писал код, так как это задача учебная, и хотя бы код вы должны написать сами

Answer 3

Вот как вариант создать все кейсы для годов.

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("Введите год: ");
    int inputYear = in.nextInt();
    String resultYear;
    switch(inputYear) {
        case 1984:
            resultYear = "крыса, зеленая";
            break;
        case 1985:
            resultYear = "бык, синий";
            break;
        case 1986:
            resultYear = "тирг, красный";
            break;
        default:
            resultYear = "ошибка";
            break;
    }
    System.out.println("Ответ: " + resultYear);
}
READ ALSO
Исключение между REST сервисами Spring

Исключение между REST сервисами Spring

Есть фронт, который отправляет разные запросы на промежуточный сервис(далее loadbalancer), он перенаправляет запросы на сервис апи(далее api)

203
Форматирование целого числа из “12345678” в “12 345 678”

Форматирование целого числа из “12345678” в “12 345 678”

Как сделать форматирование числа из "12345678" в "12 345 678"То есть нужно каждую 1000 отделить пробелом, что бы большие числа выглядели эстетично

140
Как ускорить запись в SQLite БД?

Как ускорить запись в SQLite БД?

Сейчас я записываю вот так:

162
java.lang.NoSuchMethodError: java.lang.Process.waitFor

java.lang.NoSuchMethodError: java.lang.Process.waitFor

Собственно вот такой код

188