简单输出农历 JAVA |从输入中查找动物 + 颜色/类型



我们有一个输入年份(1987年,2015年等)和中国日历。每年有12只动物在变化。 5种颜色每2年更换一次。所以绿猴和绿猴之间的周期是60年。这个周期的第一年是1984年(所以这是绿猴年)。我从 1984 年开始计算正确计数,但无法提出关于如何在 1984 年之前正确计算它的正确问题。因此,当我输入 2005 年时,一切都很好,当我输入 1983 年时,它算错了;所以我的第一个想法和代码是:

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;
}
}

那么如何在没有数组的情况下正确编码的最佳方法是什么?还是我们应该对>= 1984 和 <1984 使用不同的开关运算符?

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

和年份>0

使用查找表。

首先,您需要摆脱 1984 年的信息。今年只给你猴子发生的时候:1984 % 12 = 4,所以12周期中的第4年是猴年。

注意:这里的 12 年周期是从0年开始的!鉴于 1984 年是猴子的信息,我们可以想出哪只是 0 年的动物。我们的循环计数器与猴子无关是第一件事

现在,您可以创建查找表:

private final static Map<Integer, String> ANIMAL_YEARS = new HashMap<Integer, String>(){{
    //Check the actual values!!
    put(0, "Rat");
    put(1, "Ox");
    put(2, "Tiger");
    ...
    put(11, "Pig");
}};

现在要获得动物,您只需要致电:

String animal = ANIMAL_YEARS.get(year%12);

颜色也可以做同样的事情:

private final static Map<Integer, String> COLOR_YEARS = new HashMap<Integer, String>(){{
    //Check the actual values!!
    put(0, "Tree/Green");
    put(2, "Fire/Red");
    put(4, "Earth/Yellow");
    ...
    put(8, "Water/Black");
}};

然后,您可以:

int decimal = year % 10;
String color = COLOR_YEARS.get(decimal%2==1?decimal-1:decimal);

最新更新