Sortieren von Zahlen in einem Array

Status
Nicht offen für weitere Antworten.

Angelika_25

Bekanntes Mitglied
Hallo, ich habe folgenden Code, der noch nicht vollständig funktioniert. Ich möchte, dass die Zahlen aufsteigend sortiert sind. Normalerweise gibt es eine externe Java Klasse, die das erledigen sollte, aber laut Übungsblatt muss das sozusagen manuell gemacht werden.
Mein Code:
Code:
import static Prog1Tools.IOTools.*;
public class Aufgabe_21 {
	public static void main (String [] args) {
		int count=readInteger("Wie viele Zahlen willst du sortieren? ");
		int [] zahl=new int [count];
		
		for (int i=0; i<zahl.length; i++) {
			zahl[i]=readInteger(i+1+". Zahl: ");
		}
		
		for (int k=0; k<zahl.length; k++) {
			System.out.print(zahl[k]+" ");
		}
	
		
		for (int o=1; o<count-1; o++) {
			int j=0;
			
			while (j<count-1) {
				if (zahl[j]>zahl[j+1]) {
					int hilf=3;
					hilf=zahl[j+1];
					zahl[j+1]=zahl[j];
					zahl [j]=hilf;
					
					}
						j++;
			}
		}
		}

}
Ich denke, mit dieser Zeile stimmt etwas nicht:
Code:
for (int o=1; o<count-1; o++) {
Der ganze Code, der unten drunter steht, soll count-1 mal wiederholt werden. Deswegen meine For-Schleife.
Der Code funktioniert, aber die Zahlen werden nicht sortiert. Was stimmt an meiner Schleife nicht??

Liebe Grüße
 
Angelika_25 hat gesagt.:
Ich denke, mit dieser Zeile stimmt etwas nicht:
Code:
for (int o=1; o<count-1; o++) {
Der ganze Code, der unten drunter steht, soll count-1 mal wiederholt werden. Deswegen meine For-Schleife.
Der Code funktioniert, aber die Zahlen werden nicht sortiert. Was stimmt an meiner Schleife nicht??
Hast es doch selbst beantwortet. Setz doch mal für count 1 ein , und überleg dir, wie oft der code ausgeführt wird
Dann setze für count 2 ein, und überlege nochmal.
:autsch:

Du hast das Intervall vorne und hinten jeweils um 1 verkürzt...
von solchen scherzen wie
Code:
int o
als Bezeichner ist dringend abzuraten, weil man es mit der 0 schwer auseinanderhalten kann.

von solchen scherzen wie
Code:
o=1;
ist auch dringend abzuraten, weil normalerweise kein Mensch bei 1 loszählt, da kriegt man nur nen Knoten im Hirn vor lauter +-1-Indexverschieberei.

von solchen scherzen wie
Code:
count-1;
ist wieder abzuraten, siehe Bemerkung 2

und schließlich:
Code:
count
ist sehr mies wenn man über ein array iteriert. Man kann ja auch direkt array.length nehmen, dann weiß jeder sofort was es heißt und was da passiert.
 
ich find jetzt schnell kein beispeil wenns nicht funktioniert, aber generell würd ich for (int o=0; o<count-1; o++) schreiben...

beschreibe mal genau was du machen willst... du iterierst länge mal über das array und vertauscht bei bedarf, richtig?

warum so oft? du hast zb ein array mit der länge 10, das bereits sortierst ist... du würdest trotzdem 100 mal vergleichen...
wie wärs so... du läuft nur einmal drüber und merkst dir ob du vertauscht hast, wenn ja wiederholst du... sonst hörst auf...
 
Code:
public static int[] sort(int[] values){ //bubbble sort
      int[] newArray = values.clone();
     
      boolean ready=false;

      while(ready==false){
         //ist ist noch nicht sortiert! also false
         ready=true;
         for(int i=0;i<newArray.length-1;i++){

            if(newArray[i]>newArray[i+1]){
               int temp=newArray[i+1];
               newArray[i+1]=newArray[i];
               newArray[i]=temp;
               ready=false;
            }
         }
      }
      return newArray;
   }
 
Also das ist die Aufgabe:

Schreiben Sie ein Programm, das zuerst Zahlen von der Tastatur einliest, diese dann der Größe nach sortiert und auf dem Bildschirm ausgibt. Setzen Sie dazu folgenden Algorithmus um:
- Lesen Sie die Anzahl der zu sortierenden Zahlen in die int-Variable count ein.
- Erzeugen Sie ein eindimensionales int-Feld zahl mit count Elementen.
- Lesen Sie nun die Elemente des Felds von der Tastatur ein.
- Wiederholen Sie die folgenden Schritte count-1 mal:
- Initialisieren Sie die int-Variable j mit 0 und wiederholen Sie die folgenden Schritte,
solange j kleiner als count-1 ist:
- Ist das Element an Stelle j des Felds zahl größer als das an Stelle j+1, so vertauschen Sie die beiden
Elemente
- Erhöhen Sie j um 1.
- Geben Sie nun die Elemente des Felds auf dem Bildschirm aus.


Ich habe die unglücklichen Ausdrücke also nicht erfunden 😉.


Wie sollte ich denn meinen Code jetzt ändern, ich denke wirklich, dass nur etwas an der For-Schleife, die ich angegeben habe, etwas nicht stimmt. Das Schlimme an solchen Übungsaufgaben ist immer, dass man kaum selbst entscheiden kann/darf, wie man es macht.

Liebe Grüße
 
Das ist eine stinknormale Übungsaufgabe aus einem Buch....

Ist denn soviel falsch an meinem Code?
Es funktioniert ja das Programm, bis auf das Sortieren...
 
Angelika_25 hat gesagt.:
- Wiederholen Sie die folgenden Schritte count-1 mal:
Wie Andrey schon schrieb: das ist nicht das gleiche wie
Code:
for (int o=1; o<count-1; o++) {
Hier läuft o nämlich von 1 bis count-2; der folgende Block wird also nur (count-2)-mal ausgeführt. Also entweder o bei 0 beginnen lassen (dann liefe o von 0 bus count-2) oder in der Fortsetzungsbedingung <= verwenden (dann liefe o von 1 bis count-1).
 
Jetzt habe ich
Code:
for (int o=1; o<count-1; o++) {
durch das ersetzt:
Code:
for (int o=0; o<=count-1; o++) {
,
aber das funktioniert immernoch nicht. Er bringt keine Fehlermeldung, aber die Zahlen werden nicht sortiert...

Ich wette, das ist wieder so ein dabbischer mini-Fehler, den man nicht findet..... oder zumindest ich nicht...
 
Kannst du denn nochmal deinen Code schreiben, wie du ihn jetzt hast?

Vielleichtist dein Fehler, das du die Sachen hinschreibst nachdem das Array gefüllt wurde aber vor dem sortieren? Das ist nämlich beim Code im ersten Post das Problem!
 
Das ist mein Code:
Code:
import static Prog1Tools.IOTools.*;
public class Aufgabe_21 {
   public static void main (String [] args) {
      int count=readInteger("Wie viele Zahlen willst du sortieren? ");
      int [] zahl=new int [count];
      
      for (int i=0; i<zahl.length; i++) {
         zahl[i]=readInteger(i+1+". Zahl: ");
      }
      
      for (int k=0; k<zahl.length; k++) {
         System.out.print(zahl[k]+" ");
      }
   
      
      for (int o=1; o<count-1; o++) {
         int j=0;
         
         while (j<count-1) {
            if (zahl[j]>zahl[j+1]) {
               int hilf=3;
               hilf=zahl[j+1];
               zahl[j+1]=zahl[j];
               zahl [j]=hilf;
               
               }
                  j++;
         }
      }
      }

}
 
Die Zahlen werden nicht sortiert ausgegeben, da nach dem sortieren gar nix mehr geschrieben wird.

Du holst die Array Größe -> die Array Zahlen -> Gibst das Array(unsortiert, in der Reihenfolge wie es eingegeben wurde) aus -> sortierst -> ENDE

Er macht ja nichts mit dem sortierten.

Ganz am Ende nochmal
Code:
	      for (int k=0; k<zahl.length; k++) {
	         System.out.print(zahl[k]+" ");
	      }


Dann sollte das unsortierte und dann das sortierte da stehen?!
 
ich bin auch der meinung, dass der code funktioniert... die zahlen werden sortiert...

wieso meinst du, dass die zahlen nicht sortiert werden?
 
Es tut mir Leid, dass ich eure kostbare Zeit mit so dummen Sachen verschwendet habe. Ihr habt natürlich Recht, der Code der For-Schleife hat gestimmt, er war nur an der falschen Stelle!!!


Vielen Dank trotzdem für eure superschnelle und gute Hilfe!!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben