# JAVA Methode für Maximum aus 4 ganzen Zahlen



## SamyMZ (17. Feb 2010)

Kann mir jemand hierbei weiter helfen mit folgender Aufgabe
Brauche ich ganz dringend weil ich bald ne Klausur schreibe
Vielen Dank im Voraus
a)
Schreiben Sie in Java eine Methode, die das Maximum aus vier ganzen Zahlen (Datentyp long) zurückgibt.
Die einzelnen Zahlen sollen als Parameter übergeben werden. Der Name der Methode sei max.
(vielleicht mit kurzen Erläuterungen)

b) 
Was würde sich an der Methode ändern wenn die Zahlen in einem Array übergeben werden sollen


----------



## SamyMZ (17. Feb 2010)

und ich weiß das Aufgaben von der Uni hier nicht willkommen sind aber muss noch einen Schein in WIFO machen und bin dann mit der Uni fertig und dies ist mein allerletzter Versuch
und das sind wirklich nur Kleinigkeiten 
bin schon total am verzweifeln


----------



## eRaaaa (17. Feb 2010)

Naja, was willst du jetzt von uns hören? Es führen viele Wege nach Rom:

Mit folgender Methode z.B. hast du a) und b) in einem Sack, denn du kannst der Methode jetzt entweder ein long Array übergeben, oder einzelne long Werte...

```
public static long max (long... array){
	Arrays.sort(array);
	return array[array.length-1];
    }
```

Aber an sich ist das doch einfach nur: 

a)
return Math.max(zahl1, Math.max(zahl2, Math.max(zahl3, zahl4)));
oder so 

b) Array durchlaufen, und immer aktuelle Zahl mit aktuellen Maximum vergleichen, wenn größer --> neues Maximum setzen!


----------



## SamyMZ (17. Feb 2010)

ok danke schonmal
aber was muss ich denn jetzt genau in aufgabe a) reinschreiben
mir sagen die begriffe leider nicht so viel
und gibt es irgendwo gute literatur java für dummies oder so


----------



## hemeroc (17. Feb 2010)

für a) sollte auch das gehen:
(sehr low level)


```
public static long max(long a, long b, long c, long d) {
	  if ((a >= b) &&  (a >= c)  && (a >= d))
		  return a;
	  else if ((b >= c) && (b >= d))
		  return b;
	  if (c >= d)
		  return c;
	  else
		  return d;
  }
```

edit: oder die variante wie oben beschrieben


```
public static long max(long a, long b, long c, long d) {
	  return Math.max(a, Math.max(b, Math.max(c, d)));
  }
```

literatur für den anfang => Galileo Computing :: Java ist auch eine Insel (8. Auflage)


----------



## SamyMZ (17. Feb 2010)

DANKE

Kennst du dich auch mit Komplexitäten und while Schleifen aus
sitze hier tierisch auf den Schlauch gerade
falls es hier an die Grenzen des Forums bei der Hilfe
dann bitte kurz bescheid sagen
dann versuch ich irgendwie was eigenes reinzubringen und ihr könnt mich dann korrigieren
aber habe überhaupt keine ahnung
die aufgaben sind aber an sich recht einfach
also BITTE BITTE ein Auge zudrücken
ist MEIN ALLERLETZTER VERSUCH


----------



## hemeroc (17. Feb 2010)

Schön wäre es natürlich schon wenn du deine eigenen Ansätze einbringst und uns um Hilfe fragst wenn du nicht weiter weißt. (es wird dir sicher geholfen so gut es geht ^^)
Grundsätzlich ist es wie du selbst schon gesagt hast eher ungern gesehen wenn man sich die kompletten Hausaufgaben von der Community machen lässt.
Mein Tipp:
Versuchs einfach mal soweit du kommst und wenn du komplett anstehst sag bescheid und beschreib das Problem. Wir sind ja keine Unmenschen.​


----------



## SamyMZ (17. Feb 2010)

OK
so ähnlich hatte ich es mir auch vorgestellt
werde dann die kommenden Tage hier öfter reinschreiben
und es wäre nett wenn mir auch geholfen wird
und lacht mich bitte nicht aus 
die aufgaben sind nämlich echt armselig 
und ich check das nicht


----------



## ImmNek (18. Feb 2010)

Hallo

Hier habe ich für die Geschichte mit dem Array (Aufgabe b) noch eine Lösungsvariante, welche ohne "undurchsichtige" Methoden wie sort oder max auskommt. Natürlich sind da schnellere Wege, aber ich denke, für das Grundverständnis ist dieser garnicht so schlecht. Sollten Fragen auftauchen, so bitte einfach Fragen.


```
public long max(long[] zahlen) {
	long maximum = Long.MIN_VALUE;
	
	for (int i = 0; i < zahlen.length; i++) {
		if (maximum < zahlen[i]) {
			maximum = zahlen[i];
		}
	}
	
	return maximum;
}
```


----------



## Landei (18. Feb 2010)

```
public static long max(long a, long b, long c, long d) {
      return (a>b?a:b)>(c>d?c:d)?(a>b?a:b):(c>d?c:d);
}

-------------------------------
import static java.util.Arrays.*;
...
public static long max(long[] a) {
  return a.length == 1 ? a[0] : Math.max(max(copyOfRange(a, 0, a.length / 2)),
        max(copyOfRange(a, a.length / 2, a.length)));
}
```

SCNR


----------



## ImmNek (18. Feb 2010)

Hehe, tja, wieso verständlich wenn es undurchsichtig geht?  Ist aber auch eine interessane Variante


----------



## Empire Phoenix (18. Feb 2010)

Man könnte das ganze auch rekursiv lösen ^^


----------



## Landei (18. Feb 2010)

Empire Phoenix hat gesagt.:


> Man könnte das ganze auch rekursiv lösen ^^


Meine Lösung für ein Array _ist_ rekursiv.

Hier ist übrigens eine effizientere Variante, die das Umkopieren des Arrays vermeidet:

```
private static long maxRec(long[] a, int from, int to) {
    return (to - from == 1) ? a[from] : 
       Math.max(maxRec(a,from,(from + to)/2),maxRec(a,(from + to)/2, to));
  }
  public static long max(long[] a) {  return maxRec(a,0,a.length); }
```


----------

