# Elegante Möglichkeit die kleinste Zahl zu ermitteln.



## FoolMoon (3. Nov 2009)

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:

```
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");}     
    }

  }

}
```


----------



## bygones (4. Nov 2009)

[c]Math.min(a, Math.min(b,c));[/c]


----------



## diggaa1984 (4. Nov 2009)

```
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


----------



## FoolMoon (8. Nov 2009)

Danke, allerdings hab ich nach einer eigenen Lösung gesucht, aber ich denke das dies nicht möglich ist.


----------



## vinculum (8. Nov 2009)

Also, auch wenn es etwas behämmert aussieht, es gibt da ein formalisiertes Pattern, das sogenannte Djikstra-If. 


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


----------



## Michael... (9. Nov 2009)

Wenn's nicht um die Ausgabe der Variablenbezeichner geht:

```
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);
```


----------



## SlaterB (9. Nov 2009)

vinculum hat gesagt.:


> Also, auch wenn es etwas behämmert aussieht, es gibt da ein formalisiertes Pattern, das sogenannte Djikstra-If.
> 
> 
> ```
> ...


ist darin wirklich eine derartige Wiederholung vorgesehen?


```
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


----------



## Painii (9. Nov 2009)

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.


----------

