Klassen Algorithmus für das folgende Problem entwickeln?

Die Reihenfolge der Kacheln ist fix?
Die Reihenfolge der Kacheln ist fix?
Hallo mihe7,

ja die Reihenfolge der Kacheln mit den Chi-Namen sind fix. Nur die Monate sind dynamisch

Code:
    public Chi resetJanuaryToChi(Chi newChi) {
        int steps = Math.abs(Chi.DAN.ordinal()-newChi.ordinal());
        return resetJanuaryToChi(steps);
    }

    public Chi resetJanuaryToChi(int steps) {
        int index = (Chi.DAN.ordinal()+12+steps)%12;
        return Chi.values()[index];
    }
So würde es gehen oder?
 
Das funktioniert im Allgemeinen nicht, da Deine Berechnung von steps nur den Abstand aber nicht die Richtung liefert.

Wenn Chi.DAN.ordinal() == 2 und Chi.SUU.ordinal() == 1 und Chi.MAO.ordinal() == 3, dann haben SUU und MAO den selben Abstand von DAN, nämlich 1.
 
Ja ich war zu sehr fixiert auf vorwärts gewesen, aber dann führe ich noch eine weitere variable für vor oder rückwärts ein.
 
Du willst das positive Offset relativ zu DAN berechnen.

Das ggf. negative Offset ist ja einfach newChi.ordinal() - Chi.DAN.ordinal(). Darauf addierst Du 12 und rechnest modulo 12, dann hast Du das positive Offset relativ zu DAN.
 
Du willst das positive Offset relativ zu DAN berechnen.

Das ggf. negative Offset ist ja einfach newChi.ordinal() - Chi.DAN.ordinal(). Darauf addierst Du 12 und rechnest modulo 12, dann hast Du das positive Offset relativ zu DAN.
Irgendwie komme ich mit der Berechnung nicht auf das positive relative zu DAN. Wenn ich jetzt HOI als Ziel setze ist das Ordinal 12 und Ordinal von DAN ist 3. Also (((3-12)+12)%12)=3, aber es sollte doch 9 sein oder?

Irgendwie kann ich einfach nicht logisch denken bei sowas, wie kann man sowas den am Besten anlerne, anstatt auswendig lernen?


P.S. Durch Rumprobieren ist das eher die
Code:
int steps = ((newChi.ordinal()-Chi.DAN.ordinal())+12)%12;
 
Zuletzt bearbeitet:
Du rechnest falsch rum: das ggf. negative Offset ist: 12 - 3 (und nicht 3 - 12). Das ergibt 9 und (9 + 12) % 12 = 9
 
Irgendwie kann ich einfach nicht logisch denken bei sowas, wie kann man sowas den am Besten anlerne, anstatt auswendig lernen?
Visualisieren hilft fast immer:
Code:
Key   Ordinal
TY       0
SUU      1
DAN      2     *
MAO      3     |
THIN     4     |
TI       5     |
NGO      6     v
MUI      7
THAN     8
DAU      9
TUAT    10
HOI     11

Der Pfeil rechts zeigt vom Ausgangspunkt (DAN) zum Zielpunkt (NGO). Pfeil sollte Dir von Vektoren bekannt sein: Spitze minus Fuß: 6 - 2 = 4 -> Tada.

Code:
Key   Ordinal
TY       0     ^
SUU      1     |
DAN      2     *
MAO      3     
THIN     4     
TI       5     
NGO      6     
MUI      7
THAN     8
DAU      9
TUAT    10
HOI     11
DAN nach TY. Spitze minus Fuß = 0 - 2 = -2, Du musst also von DAN aus, 2 zurück oder eben (12 - 2) = 10 nach vorne.
 
Vielen Dank für die Aufzeichnung, ich habe das bestimmt schon 20 mal aufgezeichnet und gerate dabei einfach ins Chaos :)

Da ich so viel rumspringen musste von einen Chi zum anderen, habe ich einfach 3 Methoden dafür erweitert

Code:
    public int getSteps(Chi startChi, Chi endChi) {
        return ((endChi.ordinal()-startChi.ordinal())+12)%12;
    }
    
    public Chi getPreviousChi(Chi chi, int backSteps) {
        int index = ((chi.ordinal()-backSteps)+12)%12;
        return Chi.values()[index];
    }
    
    public Chi getNextChi(Chi chi, int additionalSteps) {
        int index = ((chi.ordinal()+additionalSteps)+12)%12;
        return Chi.values()[index];
    }

Vielen Dank für euren Engangement bis hierhin! *Daumenhoch*
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben