# Drei zahlen sortieren und in richtiger Reihenfolde ausgeben.



## enriko (25. Mai 2006)

Hallo, ich bin schon fast 2 Tage am grübeln, komme einfach nicht darauf! Wie kann man drei Zahlen  sortieren und in richtiger Reihenfolge in der Konsole ausgeben? Bitte schreibt mir nicht gleich  die Lösung sonst hab ich nichts gelernt,aber ihr könnt mir Tipps geben, danke an euch, ihr seid das beste Forum, weil einem hier am schnellsten geholfen wird!
Gruss
Enriko


----------



## Gast (25. Mai 2006)

Du legst dir ein neues Array an mit der Länge 3. dann durchläufst du das array mit einer doppelten for schleife und stellst mit if abfragen die reihenfolge so wie du sie haben möchtest.


----------



## L-ectron-X (25. Mai 2006)

Sollst/Willst du den Sortieralgorithmus selbst schreiben?
Wenn nicht gibts zum Sortieren in Java bereits vorgefertigte Klassen und Methoden.
Zahlen kannst du entweder in ein Array oder eine Collection (Vector, ArrayList etc.) stecken.
Arrays werden dann mit der Anweisung

```
Arrays.sort(meinArray);
```

und Collections mit

```
Collections.sort(meineListe);
```
sortiert.


----------



## enriko (25. Mai 2006)

Was hab ich hier falsch gemacht, irgendwie wird kein Fehler angezeigt ?


```
public class Sort {

   public static void main(String[] args) {
      int z1 = 4,z2 = 6,z3= 10;
      int [] sortiern  ;
	
      sortiern = new int[2];
		
      sortiern [0] = sortiern[z1];
      sortiern [1] = sortiern[z2];
      sortiern [2] = sortiern[z3];
		
      for (int i = 0;  i > sortiern.length; i++) {
         if(i == sortiern[i]) {				
            System.out.println(i);
         }
      }	
   }
}
```


----------



## L-ectron-X (25. Mai 2006)

Erst mal eine grobe Berichtigung:

```
public class Sort {

   public static void main(String[] args) {
      int x = 4, y = 6, z = 10;
      int[] arr = new int[3];

      arr[0] = x;
      arr[1] = y;
      arr[2] = z;

      for(int i = 0;  i < arr.length; i++) {
//         if(i == arr[i]) {
//            System.out.println(i);
//         }
      }
   }
}
```

Was passiert hier?

```
if(i == arr[i]) {
            System.out.println(i);
         }
```
Bei jedem Schleifendurchlauf wird geprüft, ob der momentane Wert der Zählervariable i dem Wert an der Indexposition, der durch die Zählervariable bestimmt wird, gleich ist.
Auf Deutsch: Ist die Zählervariable gerade 2, holst du den Wert an Arrayposition 3 aus dem Array und vergleichst ihn mit dem Wert der Zählervariable.
Und da 2 != 10 ist, wird dein _System.out.println(i)_ übersprungen.


----------



## Enriko (25. Mai 2006)

funzt immer noch nicht was mach ich bloß falsch, wo liegt mein denk fehler?

public class Sort {

	public static void main(String[] args) {
		int x = 4, y = 6, z= 10;


		int[]arr = new int[2];

		arr [0] = x;
		arr [1] = y;
		arr [2] = z;
	for (int i = 0;  i > arr.length; i++)
	{
			if(i == arr[0]| i== arr[1] | i == arr[3])
			{

			System.out.println(i);
		}

	}

}
}


----------



## Wildcard (25. Mai 2006)

```
if(i == arr[0]| i== arr[1] | i == arr[3])
```
Diese Zeile wird eine IndexOutofBoundsException werfen....
Ausserdem muss es

```
for (int i = 0; i < arr.length; i++)
```
und nicht

```
for (int i = 0; i > arr.length; i++)
```
sein  :wink:


----------



## Enriko (25. Mai 2006)

ich gebe es auf, ich Pall  immer weniger ,sorry


----------



## Enriko (25. Mai 2006)

hab bald fast alle Möglichkeiten durch irgendwann muss es ja funzen!!!!
Aber dies funzt auch nicht 

public class Sort {

	public static void main(String[] args) {
		int x = 4, y = 6, z= 10;


		int[]arr = new int[2];

		arr [0] = x;
		arr [1] = y;
		arr [2] = z;
	for (int i = 0;  i < arr.length; i++)
	{
		if((x < y) && (x> z))
			{

			System.out.println(x,y,z);
		}

	}

}
}


----------



## PyroPi (25. Mai 2006)

Hallo,

mir scheint, du probierst nur irgendwas herum, als übelegt zu programmieren.

Stell dir einfach mal vor, dein Array ist ein Schrank mit mehreren (in deinem Fall 3) Schubfächern. In jedem Schubfach liegt eine bestimmte Anzahl von Kugeln (oder sonstwelchen Gegenständen). Nun stehst du vor dem Schrank und willst die Kugeln so ordnen, daß die im obersten Schubfach die meisten, im untersten die wenigsten sind. Wie machst du das?
Eine gute Idee wäre es doch, z.B. mit dem untersten anzufangen. Du schaust also in das Fach und merkst dir wieviele Kugeln darin liegen. Jetzt gehst du Fach für Fach von unten nach oben durch und machst folgendes: Wenn die Anzahl der Kugeln in einem Fach kleiner ist als die Anzahl der Kugeln im untersten Fach, dann vertauschst du einfach die Kugelanzahl der beiden Fächer. (Vorsicht, du kannst nicht einfach beide Schubladen herausziehen und vertauschen, sondern du muß aus Fach I alle Kugeln herausnehmen, sie in ein separaten Karton legen (z.B. eine Variable temp), dann die Kugeln aus Fach II in Fach I legen, und dann wieder die Kugeln aus dem Karton in Fach II legen.). Wenn du mit diesem Verfahren ganz oben angekommen bist, bist du erstmal fertig. Du weißt jetzt, im untersten Fach sind garantiert die wenigsten Kugeln, bei den anderen Fächern ist die Anzahl noch unsortiert.
Nach dem gleichen Prinzip sortierst du nun also noch die restlichen Fächer, fängst diesmal aber bei dem zweiten von unten an, merkst dir den Wert und gehst wieder nach oben. Bei der nächsten Runde fängst du mit dem dritten von unten an und immer so weiter, bis du irgendwann beim letzten Fach angekommen bist.

Als Algorithmus sieht das ganze dann so aus:

```
n = Anzahl der Schubfächer

for startFach=0 to n-1 do  // in jeder Runde ein Fach weiter nach oben rücken
begin
    for aktuellesFach = startFach+1 to n-1 do  // alle Fächer über dem startFach überprüfen
    begin
        if kugeln[aktuellesFach] < kugeln[startFach] then tauscheKugeln(startFach, aktuellesFach)
    end
end
```

So, hoffentlich hab ich dich jetzt nicht noch weiter verwirrt.   

Viele Grüße,

PyroPi


----------



## L-ectron-X (25. Mai 2006)

Schön erklärt...

Und bitte auch noch folgemdes bedenken:
Wenn du 3 Zahlen in dein Array legen möchtest, brauchst du auch Platz für 3 Zahlen.
Deshalb:

```
int[]arr = new int[3];
```


----------



## dieta (25. Mai 2006)

Mit so einem ähnlichen Agorithmus wie dem von PyroPi haben es während einer Aktion der "KinderUni" in Trier 100 Jugendliche geschafft, 100 Zahlen im 10-stelligen Bereich in etwas mehr als 7 Minuten zu sortieren. Respekt! 3,5 sekunden pro Zahl...  :applaus:


----------



## Enriko (25. Mai 2006)

dieta hat gesagt.:
			
		

> Mit so einem ähnlichen Agorithmus wie dem von PyroPi haben es während einer Aktion der "KinderUni" in Trier 100 Jugendliche geschafft, 100 Zahlen im 10-stelligen Bereich in etwas mehr als 7 Minuten zu sortieren. Respekt! 3,5 sekunden pro Zahl...  :applaus:



Was greifst du mit dein blöden Komentar andere Leute an, es gibt keine DUMME Fragen sondern nur DUMME Antworten.


----------



## dieta (25. Mai 2006)

Wen greife ich mit diesem Kommentar an??
Ich meinte damit, das es ein sehr guter Algorithmus ist, wenn man bedenkt, dass wir in unserer Computer-AG für 10 Zahlen mit 9 Leuten über 10 Minuten brauchten! Das ist fast das 20-Fache von denen bei der Kinder-Uni!


----------



## Enriko (26. Mai 2006)

dieta hat gesagt.:
			
		

> Wen greife ich mit diesem Kommentar an??
> Ich meinte damit, das es ein sehr guter Algorithmus ist, wenn man bedenkt, dass wir in unserer Computer-AG für 10 Zahlen mit 9 Leuten über 10 Minuten brauchten! Das ist fast das 20-Fache von denen bei der Kinder-Uni!



Sorry, ist  falsch rübergekommen! ???:L


----------



## Enriko (26. Mai 2006)

Ist das bis jetzt richtig und was muss jetzt in System.out.println(????) eingeben?


class Sort{
	public static void main(String args []){
	int tausch,max = 0;
	int x=3,y=2,z=1;
	int []arr= new int[3];

	arr[0]=x;
	arr[1]= y;
	arr[2]= z;
	for (int i = arr.length; i > 1; i--){

	for(int j= 0 ; j >arr.length; j++){

		if (arr[max] < arr[j]) { //max = j;
		tausch = arr[max]; //hier werden
		arr[max] = arr[j]; //die werte des
		arr[j] = tausch; //arrays getauscht
		}

		System.out.println();
		}
	}
	}
}


----------

