# grösster Wert von Array wiedergeben



## yEEEah (8. Apr 2010)

Hallo zusammen

Bin Java-Anfänger und hätte mal meine erste Frage:

Habe einen Code geschrieben, welcher zuerst ein Array mit Zufallszahlen erzeugt. Nur dies alleine hat funktioniert. 
Jetzt wollte ich aber den Code noch weiter ausbauen, das er den grössten Wert ausspuckt. Dies funktioniert irgendwie nicht richtig. Bekomme da nur Müll raus..
Wo liegt das Problem?

Hier mal der Code: 


```
public class A1_1 {
	public static void main(String[] args) {
		   int l = Integer.parseInt(args[0]);
		 
		   int[] feld = new int[l];
		   
		   for (int i=0; i<l;i++)
		       {
		       // i-te Zufallszahl im Feld an Stelle i abspeichern
		       feld[i] =(int) Math.floor(20*Math.random())+1;
		       System.out.println(feld[i]);
		       
		       int erg = feld[0];
		       for(int c=0 ; c<l ; c++) {
		       if(feld[c] < erg)
		       erg = feld[c];
	
		       } 
		       }
		   }
	}
```

Bin für jede Hilfe dankbar! 

Schönen Morgen noch!

Gruss Jan


----------



## eRaaaa (8. Apr 2010)

Lege dir eine Variable an(außerhalb der Schleife !!!), in der du immer das aktuellste Maximum speicherst, nachdem du eine Zahl per Zufall erzeugt hast, vergleichst du einfach diese eine Zahl mit dem aktuellen Maximum, ist die Zahl größer, setzt du Maximum auf die eben gezogene...
Die zweite Schleife brauchst du also eig. gar nicht !


----------



## Sempah (8. Apr 2010)

1. würde ich die zweite Schleife nicht innerhalb der ersten durchlaufen
2. if(feld[c] < erg) --> müsste eher > heissen.


```
public static void main(String[] args) {
		int l = Integer.parseInt(args[0]);

		int[] feld = new int[l];

		for (int i = 0; i < l; i++) {
			// i-te Zufallszahl im Feld an Stelle i abspeichern
			feld[i] = (int) Math.floor(20 * Math.random()) + 1;
			System.out.println(feld[i]);

		}

		int erg = feld[0];
		for (int c = 0; c < l; c++) {
			if (feld[c] > erg)
				erg = feld[c];
		}
		System.out.println("größte Zahl: " + erg);
	}
```


----------



## yEEEah (8. Apr 2010)

Hat geklappt!

Vielen Dank euch beiden!


----------



## yEEEah (8. Apr 2010)

Und wie müsste ich vorgehen, wenn ich dem zweit-/dritt- usw. grössten Wert suchen möchte?

oder anderst ausgedrückt: 

Gibt es eine Möglichkeit ein Array mit wenigen Elementen (z.B. 6) anhand von for- und if-Schleifen zu sortieren?

Vielen Dank für eure Hilfe!

Gruss Jan


----------



## Sempah (8. Apr 2010)

z.B.

Arrays.sort(feld);

oder: http://www.java-forum.org/allgemeines/39510-arrays-listen-sortieren.html


----------



## Michael... (8. Apr 2010)

google oder auch wikipedia liefert da viele Sortieralgorithmen. z.B. BubbleSort, Quicksort...


----------



## FArt (8. Apr 2010)

Es ist nicht verkehrt (damit du auch was lernst) selber mal nachzudenken.
Bei solchen "Problemen" hat es sich bewährt, auf dem Papier die Logik mal durchzugehen und den aktuellen Wert der Variablen zu notieren. Das trägt ungemein zum Verständis bei, was man denn gerade so treibt. Da kommt man dann auch auf Lösungansätze für weiter Aufgaben.


----------



## yEEEah (8. Apr 2010)

Habe folgenden Ansatz, welcher aber nur funktioniert, wenn die Werte im Array "glücklich" angeordnet wurden.

Was müsste ich da verbessern?
Möche keine zusätzlichen Funktionen wie array.sort usw. benutzen... Ist das so irgendwie möglich?

Vielen Dank für eure Hilfe!


```
public class A1_1 {
	public static void main(String[] args) {
        int l = Integer.parseInt(args[0]);
 
        int[] feld = new int[l];
 
        for (int i = 0; i < l; i++) {
            // i-te Zufallszahl im Feld an Stelle i abspeichern
            feld[i] = (int) Math.floor(20 * Math.random()) + 1;
            System.out.println(feld[i]);
 
        }
        // Grösste/Kleinste Zufallszahl suchen
        int max = feld[0];
        int min = feld[0];
        int maxx = feld[0];
        int maxxx = feld[0];
        for (int c = 0; c < l; c++) {
            if (feld[c] > max)
                max = feld[c];
            if (feld[c] < min)
                min = feld[c];
            if (feld[c] > maxx && feld[c]< max)
                maxx = feld[c];
            if (feld[c] > maxxx && feld[c]< maxx)
                maxxx = feld[c];
        }
        System.out.println("grösste Zahl: " + max);
        System.out.println("zweitgrösste Zahl: " + maxx);
        System.out.println("drittgrösste Zahl: " + maxxx);
        System.out.println("kleinste Zahl: " + min);
        
        
        
        
    }  
}
```


----------



## Final_Striker (8. Apr 2010)

Wenn du eine neue größte Zahl findest, muss du die alte Zahl an das Feld "weiter unten", also zweitgrößte Zahl übergeben usw...


----------



## yEEEah (8. Apr 2010)

Danke für die Antwort...
Aber das mach ich doch, oder seh ich da was falsch?
Sorry, bin ein absoluter Beginner..

So, am besten komme ich mal zur Aufgabenstellung:

Erstelle ein Programm mit zwei Arrays mit je 6 Elementen. Im einen Array werden Zufallswerte
gespeichert (wie in Aufgabe 1) und im zweiten Array sollen die Werte dann nach deren Grösse
sortiert abgelegt werden.

Bin ich überhaupt auf dem richtigen Weg oder geht das so nicht?

Gruss Jan


----------



## Sempah (8. Apr 2010)

Sempah hat gesagt.:


> z.B.
> 
> Arrays.sort(feld);



quote


----------



## Michael... (8. Apr 2010)

Ich würden Deinen Ansatz vergessen und einen Ansatz wählen bei dem die Grösse des Arrays egal ist
Hier mal der einfachste Sortieralgorithmus mit zwei verschachtelten Schleifen und einer Bedingung


			
				Wikipedia#SimpleSort hat gesagt.:
			
		

> ```
> Schleife über Position = 1 .. N {
> Schleife über Position' = Position + 1 .. N {
> Falls x[Position] > x[Position'] ... {
> ...


----------



## Final_Striker (8. Apr 2010)

yEEEah hat gesagt.:


> Danke für die Antwort...
> Aber das mach ich doch, oder seh ich da was falsch?
> Sorry, bin ein absoluter Beginner..



nein, machst du nicht.

Bsp: 
kommt eine 9, speicherst du diese als größte Zahl im Feld max.
kommt dann eine 12, überschreibst du die 9 im Feld max. mit der 12
9 wäre jetzt die zweitgrößte Zahl, aber du hast sie einfach überschrieben.

d.h. du musst bevor die die 9 überschreibst, diese im Feld "weiter unten speichern" also im Feld maxx speichern.


----------

