# Array mit Zufallszahlen sortieren



## Fendt291190 (16. Jan 2013)

Hallo,

ich bin absoluter Anfänger und habe heute die Aufgabe bekommen ein Array in der Größe 5 zu erstellen.
Zusätzlich soll das Array Zufallszahlen von 10 bis 20 ausgeben und von links nach rechts sortiert werden, also kleine Zahlen links, große Zahlen rechts.

Ich bin bisher soweit gekommen, jedoch weiß ich nicht genau, wie ich das array sortieren soll und wie ich meine Zufallszahlen zwischen 10 und 20 eingrenze.

Ich hoffe das mir jemand helfen kann.


```
public class array {

	// Hauptprogramm

	public static void main (String [ ] args)	{


		// Variablen definieren, Array erstellen

	 		int n=20;
	 		int anzahl=5;
	 		int zahlen[] = new int[anzahl];



	 	//	Schleife für Zufallszahlen

	 		for(int i=0; i<zahlen.length; i++)
	 		{
	 			zahlen [i]	= (int)((Math.random()*n));

				System.out.print(" "+ zahlen[i]+" ");
	 		}


		}
	}
```


----------



## njans (16. Jan 2013)

Einfach googlen... ich habe direkt als erstes einen Link zu einem Eintrag in diesem Forum gefunden:

```
java.util.Arrays.sort( zahlen);
```

Zufallszahlen geht so:

```
Math.random() *11 +10
```

random * 10 ist dann 0 - 10 und die + 10 sorgen dafür, dass du 10 - 20 bekommst.


----------



## SlaterB (16. Jan 2013)

'Zufallszahlen zwischen 10 und 20' in Suchmaschinen eingetippt liefert ebenso direkten Code
http://www.java-forum.org/java-basics-anfaenger-themen/116303-math-random.html

sonst kann man auch bisschen allgemeiner suchen

-----

ob man in einer Übungsaufgabe Arrays.sort() schreiben soll?

ohne müsste man allerdings kompletten Sortieralgorithmus implementieren, 
auch nicht so realistisch wenn nicht zentrales benanntes Thema der Aufgabe..


----------



## njans (16. Jan 2013)

Wenn man das als Aufgabe bekommt, dann sollte man es eben hier spezifizieren. Wir können nicht in die Glasskugel gucken und die Aufgabe erraten.


----------



## Fendt291190 (16. Jan 2013)

Ich hab jetzt nur noch das Problem, das bei der Ausgabe vorne immer

z.B.   0 0 13 14 15     

steht, also ich hab immer zwei Nullen vorne.

Woran liegt das?




```
//Zufallszahlen

import java.util.Arrays;
public class array {

	//Hauptprogramm
	public static void main (String [ ] args)	{


		//Variablen definieren, Array erstellen
	 		int n=20;
	 		int anzahl=5;
	 		int zahlen[] = new int[anzahl];


	 	//Schleife für Zufallszahlen

	 		for(int i=0; i<zahlen.length; i++) 		{

			// Anweisung zur Erzeugung der Zufallszahlen

	 		zahlen [i]	= (int)((Math.random()*11 +10));

		//Hier wird sortiert

			Arrays.sort(zahlen);

	 		System.out.print(" "+ zahlen[i]+" ");

	 		}
		}
	}
```


----------



## SlaterB (16. Jan 2013)

du gibst jede Runde eine Ziffer aus, was ist in der ersten Runde los?
4 Zahlen sind garantiert noch 0, die werden nach vorne sortiert, was steht also an Index 0 im Array mit Sicherheit?

usw., überlegen was passiert,
muss ja nicht immer korrekt sein, aber wenigstens eine Meinung haben, und zwar ganz konkret, nicht 'Programm müsste funktionieren' oder so,
nach Möglichkeit durch weitere Ausgaben verifizieren, 
am Anfang natürlich schwer

wie stattdessen vorzugehen ist überlasse ich jetzt auch zunächst zum Denken


----------



## Dow Jones (16. Jan 2013)

Das liegt daran das du Arrays.sort(...) innerhalb der Schleife aufrufst. 

Beim ersten Durchlauf wird eine Zufallszahl an Position 0 geschrieben, so das dein Array in etwa so aussieht (die Elemente eines Arrays werden beim Anlegen des Arrays mit dem Wert 0 initialisiert): [x, 0, 0, 0, 0]. Jetzt sortierst du dieses Array im gleichen Schleifendurchlauf. Danach sieht das Array so aus: [0, 0, 0, 0, x].

Beim zweiten Schleifendurchlauf schreibst du eine neue Zufallszahl an Position 2. Wir haben also [0, y, 0, 0, x]. Das Array wird sofort wieder sortiert, so dass wir [0, 0, 0, x, y] (oder [0, 0, 0, y, x]) erhalten.

Beim dritten Durchlauf wird eine weitere Zufallszahl an Position 3 geschrieben: [0, 0, z, x, y]. Auch dieses Array wird augenblicklich neu sortiert: [0, 0, x, z, y] (oder ähnlich). Jedenfalls wirst du die Nullen am Anfang nicht mehr los. Jeder weitere Schleifendurchlauf wird nur noch die Werte an 4. bzw. 5. Position überscheiben. Das jeweils entstandenen Array wird sofort neu sortiert, wobei die Nullen immer am Anfang des Arrays stehen bleiben und auch nicht mehr überschieben werden.

Langer Rede kurzer Sinn - rufe Arrays.sort(...) erst nach der Schleife auf.


----------



## Landei (16. Jan 2013)

Damit du nicht immer wieder fragen musst: Du solltest dir angewöhnen, jeden Schritt, den dein Programm macht, auch zu *testen*. 

Das kann am Anfang erst mal eine einfache Konsolen-Ausgabe sein, später Debugger, Unit-Tests und Logger. Versuche nicht, zuviele Aufgaben auf einmal zu erledigen, sondern wirklich Schritt für Schritt vorzugehen. Ich weiß nun nicht, ob ihr schon Methoden behandelt habt, womit man das Programm besser untergliedern könnte.

Das mit den Test-Ausgaben könnte so aussehen:


```
import java.util.Arrays;
public class array {
 
    //Hauptprogramm
    public static void main (String [ ] args)   {
 
            //Variablen definieren, Array erstellen
            int anzahl=5;
            int zahlen[] = new int[anzahl];

            //Haben wir ein leeres Array mit 5 Elementen?    
            System.out.println(Arrays.toString(zahlen));   
 
            for(int i=0; i<zahlen.length; i++)      {
                int zufallsZahl = (int)((Math.random()*11 +10));  //nebenbei bemerkt ist Random.nextInt(...) bequemer
                System.out.println("Zufallszahl #" + i + " ist " + zufallsZahl);
                zahlen[i] = zufallsZahl;
            }  
 
            //Das unsortierte Array
            System.out.println(Arrays.toString(zahlen));   

            Arrays.sort(zahlen);
 
            //Das hoffentlich sortierte Array
            System.out.println(Arrays.toString(zahlen));   
      }
}
```

Wenn alles läuft, kannst du natürlich die überflüssigen Ausgaben herausnehmen.


----------

