Java Vergleich von Zahlen

Status
Für weitere Antworten geschlossen.
D

Donnidonis

Gast
Ich hab ne kleine Frage ;)
Die aufgabe ist:
3 Zahlen einlesen und die größte Ausgeben.
Mein Code ist im Moment:
Code:
    public static void main(String[] args) {
        // TODO code application logic here
        
        double zahl1;
        double zahl2;
        double zahl3;
        
        String eins = null;
        String zwei = null;
        String drei = null;
        
        // Zahl1
        eins = JOptionPane.showInputDialog("Gib die Erste Zahl ein:");
        zahl1 = Double.parseDouble(eins);
        
        // Zahl2
        zwei = JOptionPane.showInputDialog("Gib die Zweite Zahl ein:");
        zahl2 = Double.parseDouble(zwei);
        
        // Zahl3
        drei = JOptionPane.showInputDialog("Gib die Dritte Zahl ein:");
        zahl3 = Double.parseDouble(drei);
        
        if ( zahl1 > zahl2 && zahl1 > zahl3)
        {
            System.out.println(zahl1);
        }
        if ( zahl2 > zahl1 && zahl2 > zahl3)
        {
            System.out.println(zahl2);
        }
        if ( zahl3 > zahl2 && zahl3 > zahl2)
        {
            System.out.println(zahl3);
        }
    }
}

Jetzt hab ich da ja 3 if-Anweisungen.
Geht das auch irgendwie einfacher, mit if-else oder if else-if oder sonnst was?
 
pack die Zahlen in einen Array, benutze die "Arrays.sort()" metohde und gibt den ersten bzw. letzten Array-index aus :)
 
Mh also es ist eine Schulaufgabe und wir machen grade if-Anweisung.
Deswegn is ein Array nicht Optimal ;)
Weiß auch nicht genau wie das mit dem Array geht, könntest du mir sagen wie ich die Zahlen dareinlegen kann?
 
@ Suchu: Da es für nur 3 Zahlen und nicht für eine beliebige Anzahl dienen soll, wäre ein Array zu tief gegriffen und ist dem TE vermutlich auch noch nicht bekannt :-)
 
Hi,

"alle Wege führen nach Rom" sagt man so schön. Es gibt hierfür etliche denkbare Ansätze:

- if => else if => else
- alles in ein Array und eine Schleife drüber laufen lassen
- Arrays.sort()
- Math.max()

Wie du siehst gibt es viele Mittel, das Problem zu lösen.

VG,
Mad
 
Bei folgendem:
Math.max(Math.max(zahl1,zahl2),zahl3)
wird zuerst das innere Math.max ausgeführt und die größere Zahl für das Außere verwendet.

Bsp:

zahl1 ist 0,
zahl2 ist 1,
zahl2 ist 2.

Math.max(Math.max(0,1),2)

Inneres Math.max liefert 0,
Also sieht der PC es nach dem Ausführen des inneren quasi so an:
Math.max(1,2)

Das Ergebnis hiervon ist dann 2.

Fertig.
 
Hi,

ja, aber wenn du es so machst wie nullPtr oder TheRealVash es geschrieben haben geht es wunderbar.

VG,
Mad
 
Code:
if ( zahl1 > zahl2 && zahl1 > zahl3)
{
    System.out.println(zahl1);
}
else if ( zahl2 > zahl1 && zahl2 > zahl3)
{
    System.out.println(zahl2);
}
else
{
    System.out.println(zahl3);
}

Der Worst-Case sind somit nur zwei If-Abfragen.
Wenn Zahl1 die größte ist, wurde schon die größte Zahl gefunden und die anderen Abfragen müssen erst gar nicht stattfinden.

Ansonsten, wie schon gesagt wurde:
Code:
System.out.println(Math.max(Zahl1, Math.max(Zahl2, Zahl3));
 
Auch eine Möglichkeit; VarArgs! ;)
Code:
	public static int groessteZahl(int... nums) {
		int highest = 0;
		for (int number : nums)
			if (number > highest)
				highest = number;
		return highest;
	}
Damit sind beliebig viele Zahlen möglich ... das mit Arrays und sort dafür halte ich zumindest für Blödsinn :D
 
Möglichkeiten gibt es viele, nur mittels bedingter Anweisungen lösen würden dieses Problem die (hoffentlich) wenigsten :D

Zwingende Anforderungen solltest Du in der Eingangsfrage immer aufführen...
 
Du kannst dir auch direkt nen 3-fach max implementieren; da wirst dann auch deine geforderten ifs benötigen. Oder besser noch ein n-fach-if ;D
 
Vielen dank an alle, hab es jetzt ;)
Hab das Ergebnis so ausgegebn:
JOptionPane.showMessageDialog(null, "Größte Zhl: " + Math.max(zahl1, Math.max(zahl2, zahl3)));

Vielen dank ;)
 
Eine Lösung wie von Marco01_809 skizziert, ist IMHO schöner. Die funktioniert mit einer beliebigen Anzahl von Werten. Hingegen Du ansonsten bei veränderten Anforderungen immer wieder Deinen Code anpassen müsstest.

Allerdings sollte man eine Abfrage einbauen, um den Fall zu behandeln, dass das Array keine Elemente enthält. Dann hättest Du auch eine if-Anweisung ;)
 
Sollte jemand die Lösung von Marco01_809 in Betracht ziehen, die Variable "highest" bitte auf Integer.MIN_VALUE initialisieren, sonst wird schwer bei negativen Zahlen.
 
Mach deine Hausaufgaben selber und befolge demnächst mal die Forenregeln, die unter anderem ausdrücklich klarmachen, dass das hier kein Hausaufgabenboard ist.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben