tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von vfl_freak
  • 1 Beitrag von Anime-Otaku
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
1049
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    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)
    Code java:
    1
    
    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ß
     

  2. #2
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    905
    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.
    Code java:
    1
    2
    3
    
            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.
    Geändert von Anime-Otaku (25.02.10 um 08:31 Uhr)
     
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
    Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
    Blog: http://javaeffective.wordpress.com/

  3. #3
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    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
    Code java:
    1
    
    int max = Math.max(Math.max(goU, goD),Math.max(goR,goL));

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

    Danke für die Info
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Du könntest es so versuchen:
    Code java:
    1
    2
    3
    4
    5
    
    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ß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    also ich finde die Version mit "Math.max" um Längen sinnvoller, als Deine erste Version
    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
    Biergamasda bedankt sich. 
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  6. #6
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    905
    Ich persönlich fände hier die 2. Variante am sinnvollsten. Da bei der 3. Variante sonst die ints erst in Integer wandeln muss.

    Code java:
    1
    2
    3
    4
    
        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
     
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
    Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
    Blog: http://javaeffective.wordpress.com/

  7. #7
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    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?
     

  8. #8
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    905
    Nein

    P.S.: Du kannst Math.max als static import reinmachen. Dadurch musst du nur noch max schreiben
    Biergamasda bedankt sich. 
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
    Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
    Blog: http://javaeffective.wordpress.com/

  9. #9
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    Zitat Zitat von Anime-Otaku Beitrag anzeigen
    Nein

    P.S.: Du kannst Math.max als static import reinmachen. Dadurch musst du nur noch max schreiben
    Is klar, ja
    Nochmals danke für die Antwoten und die nette Diskussion

    Gruß
     

Ähnliche Themen

  1. Maximalwert für Feld
    Von klanawagna im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 13.03.10, 11:42
  2. Funktion Maximalwert?
    Von Joerg_Sickler im Forum Visual Basic 6.0
    Antworten: 4
    Letzter Beitrag: 25.09.07, 17:42
  3. Maximalwert Berechnung
    Von pete_redman im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 06.03.07, 20:07
  4. maximalwert in C ermitteln!!
    Von LatschFOB im Forum C/C++
    Antworten: 10
    Letzter Beitrag: 16.10.03, 19:52
  5. Selektiere Maximalwert...
    Von Subwoover im Forum PHP
    Antworten: 9
    Letzter Beitrag: 11.05.02, 20:41