Elegante Möglichkeit die kleinste Zahl zu ermitteln.

Status
Nicht offen für weitere Antworten.

FoolMoon

Mitglied
Moin Moin

Ich suche nach einer eleganteren (eventuell auch rechnerischen) Lösung/Möglichkeit aus drei Zahlen die kleinste er erfahren. Momentan hab ich es mit drei verschachtelten if-Abfragen realisiert. Hat ihr eventuell einen Impuls für mich, wie man es besser umsetzten kann?

Aktueller Code:
Java:
public class Temp{

  public static void main(String[] args) {
    int a = 3;
    int b = 4;
    int c = 2;

    if (a < b) { 
      if (a < c) { System.out.println("a");}
      else { System.out.println("c");}
    }    
    else {                            
      if(b < c) { System.out.println("b");}      
      else { System.out.println("c");}     
    }

  }

}
 
Java:
System.out.println(Math.min(Math.min(a,b),c));

geht dir nur der String a b c flöten 😀 .. aber dafür gibt er die kleinste zahl aus
 
Danke, allerdings hab ich nach einer eigenen Lösung gesucht, aber ich denke das dies nicht möglich ist.
 
Also, auch wenn es etwas behämmert aussieht, es gibt da ein formalisiertes Pattern, das sogenannte Djikstra-If.

Java:
if(a <=b && b<=c)System.out.println("a");
if(b<=c && c <=a)System.out.println("b");
if(c<=a && a<=b)System.out.println("c");
if(a<=c && c<=b)System.out.println("a");
if(b<=a && a <=c)System.out.println("b");
if(c<=b && b<=a)System.out.println("c");

Die Idee ist, das jede der erlaubten Ergebnismengen welche durch die einzelnen IF-Blöcke erlaubt wird disjunkt also ohne gemeinsame Elemente ist. Das Konstrukt stammt aus der funktionalen Programmierung und geht auf Edsger Wybe Dijkstra ? Wikipedia zurück.
 
Wenn's nicht um die Ausgabe der Variablenbezeichner geht:
Java:
int[] z = { 3, 4, 2 };
int min = Integer.MAX_VALUE;
for (int i = 0; i < z.length; i++)
	if (z[i] < min)
		min = z[i];
System.out.println("Die kleinste Zahl aus der Menge "
	+ java.util.Arrays.toString(z) + " lautet: " + min);
 
Also, auch wenn es etwas behämmert aussieht, es gibt da ein formalisiertes Pattern, das sogenannte Djikstra-If.

Java:
if(a <=b && b<=c)System.out.println("a");
if(b<=c && c <=a)System.out.println("b");
if(c<=a && a<=b)System.out.println("c");
if(a<=c && c<=b)System.out.println("a");
if(b<=a && a <=c)System.out.println("b");
if(c<=b && b<=a)System.out.println("c");
ist darin wirklich eine derartige Wiederholung vorgesehen?

Java:
if(a<=b && a<=c)System.out.println("a");
if(b<=c && b<=a)System.out.println("b");
if(c<=a && c<=b)System.out.println("c");
tut es doch auch wenn nur das erste Element interessiert

edit: oh, das ist ja im ersten Posting schon weitgehend vorhanden,
von Fragen wie < statt <= abgesehen
 
So wie du es hast gehts nicht wirklich besser...

Was du machen könntest:
Die key-value-paare (a->int, b->int, c->int) zusammenfassen, sortieren, und einen Baum draus bauen.
Da kannst du dann mit Binärsuche drübergehen und das kleinste Element suchen.

Lohnt sich nicht für 3 Werte, aber später vielleicht...


Das zusammenfassen der Paare damit du dann später auch wieder a, b oder c ausgeben kannst wenn du das Minimum gefunden hast.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben