Bubblesort

  • Themenstarter Themenstarter Chimi
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
C

Chimi

Gast
Ich hab mal eine kleine frage zum Bubblesort, wir hatten ihn in der schule in softwareingeneering durchgenommen und ich hab mich zu hause mal hingesetzt und wollte ihn selber schreiben, soweit so gut, kein problem, aber bei mir meckert eclipse, syntax fehler werden nicht angezeigt nur nach "run as java application" kommt

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11
at Sortier.verfahren(Sortieren.java:12)
at Sortieren.main(Sortieren.java:30)


Hm, die meldung deutet ja darauf hin das ein wert ausserhalb des arrays liegt, aber weiß nicht wo der fehler liegt

Hier mein code:

Code:
class Sortier {
	private int zahlen [];

	public Sortier(int[] zahlen) {
		this.zahlen = zahlen;
	}
	
	public int [] verfahren() {
		int hilf =0;
		for(int k=0; k < zahlen.length-1; k++)
			for(int i=0; i < zahlen.length; i++) {
				if(zahlen[i] > zahlen[i+1]) {
					hilf=zahlen[i];
					zahlen[i]=zahlen[i+1];
					zahlen[i]=hilf;
				}
			}
		return zahlen;
	}	
}


public class Sortieren {

	public static void main(String[] args) {
		
		int[] n={1, 4, 6, 7, 3, 5, 8, 9, 10, 3, 5};
		Sortier s1=new Sortier(n);
		
		int erg []=s1.verfahren();
		
		for(int i=0; i < erg.length; i++) {
			System.out.println(erg[i]);
		}

	}

}
 
Code:
for(int k=0; k < zahlen.length-1; k++) 
    for(int i=0; i < zahlen.length; i++) {
            if(zahlen[i] > zahlen[i+1]) {

i wird irgendwann zahlen.length-1, und mit i+1 greift man dann auf den index zahlen.length zu - und das ist 1 zu viel ...
 
Danke, nun geht es, nur ein anderes problem, bei der ausgabe wird nur das erstellte array zurück- / ausgegeben.

Ich habe zahlen geclont, aber hat nicht das ergebnis was ich mir erhoft habe.

Code:
class Sortier {
	private int zahlen [];

	public Sortier(int[] zahlen) {
		this.zahlen = zahlen;
	}
	
	public int [] verfahren() {
		int[] zahlen=(int[])((this.zahlen).clone());
		int hilf =0;
		for(int k=0; k < zahlen.length-1; k++)
			for(int i=0; i < zahlen.length-1; i++) {
				if(zahlen[i] > zahlen[i+1]) {
					hilf=zahlen[i];
					zahlen[i]=zahlen[i+1];
					zahlen[i]=hilf;
				}
			}
		return zahlen;
	}	
}


public class Sortieren {

	public static void main(String[] args) {
		
		int[] n={1, 4, 6, 7, 3, 5, 8, 9, 10, 3, 5};
		Sortier s1=new Sortier(n);
		
		int erg []=s1.verfahren();
		
		for(int i=0; i < erg.length; i++) {
			System.out.println(erg[i]);
		}

	}

}
 
Schau dir nochmal das Vertauschen an (das mit dem "hilf"). Ggf. mal aufmalen, oder mit Münzen in nebeneinanderliegenden Streichholzschachteln nachspielen. Ist nur eine Kleinigkeit.
 
Und für alle die hiernach gesucht haben und jetzt trotzdem nicht wissen wie es richtig ist :

Code:
public int [] verfahren() {
      int[] zahlen=(int[])((this.zahlen).clone());
      int hilf =0;
      for(int k=0; k < zahlen.length-1; k++)
         for(int i=k+1; i < zahlen.length-1; i++) {
            if(zahlen[k] > zahlen[i]) {
               hilf=zahlen[i];
               zahlen[i]=zahlen[k];
               zahlen[k]=hilf;
            }
         }
      return zahlen;
   }   
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben