Klassen Algorithmus für das folgende Problem entwickeln?

Diskutiere Algorithmus für das folgende Problem entwickeln? im Allgemeine Java-Themen Bereich.
L

lam_tr

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?
 
mihe7

mihe7

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.
 
L

lam_tr

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.
 
L

lam_tr

Wozu? Die Richtung gibt Dir ja schon das Vorzeichen an :)

Code:
1-2 = -1
3-2 = +1
Dann kommen wir wieder zurück zu deine Frage, an welche Stelle weiß ich ob der nach vorne oder zurückläuft die Schritte.

Im überhaupt zu wissen welches Vorzeichen ich benutzen soll?
 
mihe7

mihe7

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.
 
L

lam_tr

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:
mihe7

mihe7

Du rechnest falsch rum: das ggf. negative Offset ist: 12 - 3 (und nicht 3 - 12). Das ergibt 9 und (9 + 12) % 12 = 9
 
mihe7

mihe7

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.
 
L

lam_tr

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*
 
Thema: 

Algorithmus für das folgende Problem entwickeln?

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben