Maximalwert von 4 int Variablen

Biergamasda

Erfahrenes Mitglied
Hi Leute, hätte mal kurz eine Frage.

Ich habe jetzt sozusagen manuelles divide and conquer betrieben, würde jedoch gerne wissen, obs nicht möglich ist das ganze etwas formschöner zu gestalten? (und damit meine ich nicht, dass ich drei zeilen draus mache und 2 Variablen einführe)
Java:
int max = (goU > goD ? goU : goD) > (goR > goL ? goR : goL) ? (goU > goD ? goU : goD) : (goR > goL ? goR : goL);

hatte da vielleicht jemand eine Idee dazu?

Gruß
 
Es gibt da verschiedene andere Möglichkeiten.

1. Du benutzt zum Vergleichen
Math.max(zahl1, zahl2);
Das gibt dir immer die höchste beider Zahlen zurück

2. Du hast ein Array an Zahlen, z.B. int[]. Dann kannst du das Array einfach sortieren lassen mit Arrays.sort(array) und dir dann den höchsten einfach herausholen.

z.B.
Java:
        int[] ar = {3,5,2,345,634,23};
        Arrays.sort(ar);
        System.out.println(ar[ar.length-1]);

3. Du hast eine Collection (z.B. eine List) da gibt es die Methode Collections.max(collection), welche dir den höchsten Wert zurück liefert. Man kann natürlich auch ein Array in eine Liste verwandeln. Dazu gibt es die Arrays.asList Methode.

Ansonsten fällt mir keine bessere Variante ein.
 
Zuletzt bearbeitet:
Das mit dem Array und der Collection is mir schon klar, wär auch meine erste Idee gewesen, aber das erzeugt nur overhead und sonst nüsse, demnach habe ich das wieder verworfen.

das mit dem Math.max() gefällt mir ganz gut, werde das denke ich so machen
Java:
int max = Math.max(Math.max(goU, goD),Math.max(goR,goL));

Naja, gerade übersichtlicher ist das ja nicht, aber eindeutig kürzer :D

Danke für die Info
 
Hi.

Du könntest es so versuchen:
Java:
private static <T extends Object & Comparable<? super T>> T maxOfN(T... args) {
    return Collections.max(Arrays.asList(args));
}

int max = maxOfN(goU, goD, goR, goL);
Gruß
 
Moin,

also ich finde die Version mit "Math.max" um Längen sinnvoller, als Deine erste Version :eek::p
Du musst immer davon ausgehen, dass jemand den Code lesen (und nachvollziehen soll) der ihn nicht kennt - und da ist Dein 4-fach verkettes (X > Y ? X : Y) zunächst einfach nur Krampf, oder ?

Ich kenne ja nun den Kontext nicht, und mit 4 Werten mag das ja alles noch gehen, aber wenn es morgen mal plötzlich 6, 8 oder gar 20 Werte werden ...... von daher würde ich IMMER die von Anime-Otaku vorgeschlagenen Version (2) oder (3) bevorzugen (!)

Gruß
Klaus
 
Ich persönlich fände hier die 2. Variante am sinnvollsten. Da bei der 3. Variante sonst die ints erst in Integer wandeln muss.

Java:
    public int max(int... vInts) {
        Arrays.sort(vInts);
        return vInts[vInts.length-1];
    }

Oder du iterierst schnell durch und behällst den größten Wert :)
 
Es handelt sich um 4 mögliche Bewegungsrichtungen, demnach wird nie mehr als 4.
Wenn es keine fix definierten variablen wären hätte ich das logischerweise auch mithilfe von Arrays gemacht, ist ja nicht so dass ich mich damit nicht auskenne. Es ging eben nur darum, von 4 Variablen die größte zu ermitteln, und da ist denke ich die Variante mit Math.max() die sinnvollste, da sie sowohl speicher als auch rechentechnisch den geringsten Aufwand verursacht.

Oder irre ich mich hierbei?
 
Zurück