Sortie simple Calendrier chinois JAVA / Trouver un animal + couleur / type à partir de l'entrée


Nous avons une année d'entrée (1987, 2015, etc.) et un calendrier chinois. 12 animaux changent chaque année. 5 couleurs changent tous les 2 ans. Donc le cycle est de 60 ans entre le Singe Vert et le Singe Vert. La première année de ce cycle est 1984 (c'est donc l'année du singe vert). J'ai le bon nombre à partir de 1984, mais je ne peux pas poser la bonne question sur la façon de le calculer juste AVANT 1984. Donc quand j'entre 2005 tout est bon et quand j'entre 1983 ça compte mal; Donc ma première idée et le code était:

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

Alors, quelle est la meilleure façon de coder correctement sans tableaux ? Ou devrions-nous utiliser différents opérateurs de commutation pour >= 1984 et

Author: GBarkhatov, 2015-03-16

2 answers

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

Et l'année >0

 0
Author: rick yy, 2015-03-16 09:08:20

Utilisez une table de recherche .

Tout d'abord, vous devez vous débarrasser des informations de 1984. Cette année ne vous donne que lorsque le singe se produit: 1984 % 12 = 4, donc la 4ème année du cycle 12 est l'année du singe.

NB: ici, le cycle de 12 ans est prise à partir de l'année 0! Étant donné l'information que 1984 est un singe, nous pouvons trouver qui était l'animal à l'année 0. Notre compteur cyclique n'est pas lié à la chose Monkey is first.

Maintenant vous peut créer votre table de recherche:

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

Maintenant pour obtenir les animaux, vous ne devez appeler:

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

La même chose peut être faite avec la couleur:

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

Alors vous pouvez:

int decimal = year % 10;
String color = COLOR_YEARS.get(decimal%2==1?decimal-1:decimal);
 0
Author: Narmer, 2017-05-23 11:56:51