簡體   English   中英

簡單輸出中文日歷JAVA | 從輸入中查找動物+顏色/類型

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

我們有一個輸入年份(1987、2015等)和中國日歷。 每年有12種動物在變化。 每2年更換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使用不同的開關運算符?

(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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM