Search code examples
javamathcalendarswitch-statementpuzzle

Simple output Chinese calendar JAVA | Find an animal + color/type from input


We have an input year (1987, 2015 etc) and Chinese calendar. 12 animals are changing every year. 5 colors are changing every 2 year. So the cycle is 60 years between Green Monkey and Green Monkey. First year of that cycle is 1984 (so it's Green Monkey year). I've got right count starting 1984, but can't come up with the right question on how to calculate it right BEFORE 1984. So when I input 2005 everything is good and when I input 1983 it counts wrong; So my first idea and code was:

public static String getChineseType (int year) {
    String answer = "42";

    switch (year > 1984 ? (year-1984)%10/2 : SECOND OPTION {
        case 0: answer = "Tree/Green"; break;
        case 1: answer = "Fire/Red"; break;
        case 2: answer = "Earth/Yellow"; break;
        case 3: answer = "Metal/White"; break;
        case 4: answer = "Water/Black"; break;
        default: answer = "Wrong year num"; break;
    }
    switch (year > 1984 ? (year-1984)%12 : SECOND OPTION {
        case 0: answer += " Rat"; break;
        case 1: answer += " Ox"; break;
        case 2: answer += " Tiger"; break;
        case 3: answer += " Rabbit"; break;
        case 4: answer += " Dragon"; break;
        case 5: answer += " Snake"; break;
        case 6: answer += " Horse"; break;
        case 7: answer += " Goat"; break;
        case 8: answer += " Monkey"; break;
        case 9: answer += " Rooster"; break;
        case 10: answer += " Dog"; break;
        case 11: answer += " Pig"; break;
        default: answer += " Wrong year num"; break;
    }
    return answer;
}
}

So what's the best way on how to code it right without arrays? Or should we use different switch operators for >= 1984 and <1984?


Solution

  • (year-1984)%10/2 equals  
    (year-984)%10/2, 
    (year-84)%10/2 ,
    (year-4)%10/2,
    (year+6)%10/2
    

    and the year >0