有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我们有输入年份(1987年、2015年等)和中国日历。 12只动物每年都在变化。每两年更换5种颜色所以绿猴和绿猴之间的周期是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?


共 (2) 个答案

  1. # 1 楼答案

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

    以及今年>;0

  2. # 2 楼答案

    使用lookup table

    首先,你需要摆脱1984年的信息。今年只给出猴子出现的时间:1984 % 12 = 4,因此12个周期中的第4年是猴子年

    NB:这里的12年周期从^{年开始!根据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);