Elegante Möglichkeit die kleinste Zahl zu ermitteln.

FoolMoon

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

  }

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

  }

}

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)
 
Hallo,

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

Java:
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
 
Oder halt
Java:
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:
Java:
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? :p

Java:
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...
 
Zuletzt bearbeitet von einem Moderator:
@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:
Java:
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
 
Hallo,

schon klar...

mit static import wirds noch eleganter / hübscher:
Java:
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
 
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.
 
Zuletzt bearbeitet von einem Moderator:
Zurück