# Elegante Möglichkeit die kleinste Zahl zu ermitteln.



## FoolMoon (3. November 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");}     
    }

  }

}
```


----------



## mccae (3. November 2009)

FoolMoon hat gesagt.:


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



Bei so wenigen Zahlen fällt mir zumindest nichts effizienteres ein,...

Würden die Zahlen als Array / Collection vorliegen, könnte man diese/s sortieren und sich je nach Sortierart das erste oder letzte Element der Arrays / der Collection schnappen....

Bei sehr vielen Zahlen würde ich nen rekursiven Quicksort-algorithmus drüberlaufen lassen und mir dann das niedrigeste Element holen. (oder gleich eine sortierte Collection benutzen)


----------



## Thomas Darimont (4. November 2009)

Hallo,

halbwegs elegant, nicht sehr performant (aber für den genannten Anwendungsfall "ausreichend" schnell ;-) )


```
package de.tutorials;

import java.util.Arrays;
import java.util.Collections;

public class MinValues {
    public static void main(String[] args) {
        System.out.println(Collections.min(Arrays.asList(3,4,2)));
    }
}
```

Gruß Tom


----------



## kabel2 (4. November 2009)

Oder halt

```
System.out.println(a<b?(a<c?a:(b<c?b:c)):b<c?b:c);
```
ist aber nicht mal halb so elegant und lesbar wie die Lösung von Thomas.
@thomas: _Halbwegs elegent?_ Das tanzt doch das Auge drüber ;-) Ich finds genial.

Das braucht übrigens nicht geklammert zu werden:

```
System.out.println(a<b?a<c?a:b<c?b:c:b<c?b:c);
```

Ach ja, hab ich gesagt dass diese Lösung nur ganz schlecht skaliert? 


```
System.out.println(a<b?a<c?a<d?a:d:c<b?c<d?c:d:-1:b<c?b<d?b:d:c<d?c:d);
```

Es gibt da noch ein Math.min(), allerdings keine Convenience für 3 Parameter...


----------



## zerix (4. November 2009)

@Tom

Die Aufgabe ist eine typische Aufgabe, wenn man gerade irgendwie Java lernt, bspw im Studium.
Deshalb denke ich mal, dass er die Java-API nicht komplett nutzen darf. 

Die schnellste und meiner Meinung nach eleganteste Methode  ist diese:

```
public class Minimum {

	public static void main(String[] args) {

		int a = 3;
		int b = 4;
		int c = 2;

		int min = a;
		
		if (min > b) {
			min = b;
		}
		if (min > c) {
			min = c;
		} 

		System.out.println(min);
		
	}
}
```


Gruß

Sascha


----------



## Thomas Darimont (4. November 2009)

Hallo,

schon klar...

mit static import wirds noch eleganter / hübscher:

```
package de.tutorials;

import static java.util.Collections.min;
import static java.util.Arrays.asList;

public class MinValues {
    public static void main(String[] args) {
        System.out.println(min(asList(3,4,2)));
    }
}
```

Gruß Tom


----------



## FoolMoon (8. November 2009)

Ihr seit alle klasse. ;-)

Ja, es war eine Aufgabe die in den Übungen behandelt wurde, allerdings hab ich sie mit meiner Lösung bereits gelöst. Doch mit dem Ergebnis kam die Frage ob es noch effektiver und eleganter geht.

*@Thomas Darimont*
Deine erste Lösung ist sinnvoll, doch wollte ich es ohne API realisieren.

*@kabel2*
Sehr kompakte Lösung, gefällt mir. ;-)

*@zerix*
Ohh, mit nur zwei if Abfrage. Das auch gut. Sehr gut sogar.


----------

