# MergeSort



## Dagobert (10. Sep 2007)

Kann mir jemand sagen was an diesem Code falsch ist? Ich kann einfach mein Fehler nicht finden oder den fehler die Methode zusammen ist nicht von mir, sondern von userer Infolehrerin...

Danke für Antworten


```
import java.io.*;

public class MergeSort {

	public MergeSort() throws IOException {
		char[] wort = eingabe();
		teile(wort, 0, wort.length);
		ausgabe(wort);
	}

	public static char[] eingabe() throws IOException {
		BufferedReader io = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("Bitte geben Sie ein Wort ein was sortiert werden soll:");
		String eingabe = io.readLine();
		int n = eingabe.length();
		char[] wort = new char[n];
		for (int i = 0; i < n; i++) {
			wort[i] = eingabe.charAt(i);
		}
		return wort;
	}

	static void teile(char[] wort, int unten, int oben) {
		if (unten < oben) {
			int mitte = (oben + unten) / 2;
			teile(wort, unten, mitte);
			teile(wort, mitte + 1, oben);
			 zusammen(wort, unten, mitte, oben);
		}
	}

	public static void zusammen(char[] B, int unten, int mitte, int oben) {
		char[] temp = new char[oben - unten + 1];
		for (int i = 0, j = unten, k = mitte; i < temp.length; i++) {
			if ((k > oben) || (j < mitte) && (B[j] < B[k])) {
				temp[i] = B[j];
				j++;
			} else {
				temp[i] = B[k];
				k++;
			}
		}
		for (int i = 0; i < temp.length; i++) {
			B[unten + i] = temp[i];
		}
	}

	public static void ausgabe(char[] wort) {
		for (int i = 0; i < wort.length; i++) {
			System.out.print(wort[i]);
		}
	}

	public static void main(String[] args) throws IOException {
		MergeSort MS = new MergeSort();
	}
}
```


----------



## SlaterB (10. Sep 2007)

kannst du nebenbei noch sagen, was dich vermuten läßt, dass etwas falsch ist?

bekommst du falsche Ergebnisse oder ist das eine Aufgabe oder oder


----------



## Dagobert (10. Sep 2007)

Ich bekomme ein IndexoutofBounds in Zeile 4...
aber ich hab keine Ahnung warum? Vllt. hab ich auch einfach iwo vergessen ne -1 hinter der Verwendung vom Arry zu hängen...


----------



## SlaterB (10. Sep 2007)

Zeile 4 ist eine Leerzeile..

und gleich die verwendete Eingabe char für char angeben, bisschen mitdenken bitte..


----------



## tuxedo (10. Sep 2007)

Zeile 4 ist eine Leerzeile?

[edit] mist, zu langsam...


----------



## Dagobert (10. Sep 2007)

Jaja Eclips ist manchemal lustig... XD

aber wo ist mein Fehler? Meine Infolehrerin hatte kein bock drüber zu gucken oder weis net was sie uns erzählt, was ich er glaube^^


----------



## SlaterB (10. Sep 2007)

ja witzig wenn du nicht mithilfst


----------



## Dagobert (10. Sep 2007)

wenn ich wüste wo meine Fehler grade ist würde ich nicht hier fragen XD

Hier die komplette Eclips Fehlermeldung:


> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
> at Sortierverfahren.MergeSort.zusammen(MergeSort.java:41)
> at Sortierverfahren.MergeSort.teile(MergeSort.java:30)
> at Sortierverfahren.MergeSort.teile(MergeSort.java:29)
> ...


----------



## SlaterB (10. Sep 2007)

Zeile 41 (ok, auch ne Leerzeile, aber schon näher dran), und wie ich befürchtet hatte: nach der verwendeten Eingabe muss ich dich immer noch extra fragen,
weder über die eigene Fragestellung nachlesen noch Nachfragen beachten, schöne Einstellung


----------



## Marco13 (10. Sep 2007)

Das heißt nur, dass der Index 4 außerhalb der Bounds ist. _Auftreten_ tut der Fehler in Zeile 41. Und das ist eine schließende Klammer  :lol:


----------



## Dagobert (10. Sep 2007)

Ich hab doch deine Frage beantwortet.
Ich krieg nen Fehler zurück... siehe oben. Es ist eine Aufgabe die wir in der Schule machen sollte, aber wie gesagt ich hab da nen kleinen Fehler. 
Was willst du noch wisse? :?:


----------



## SlaterB (10. Sep 2007)

zum dritten Mal du Schlafmütze (jetzt muss man das sagen dürfen): 
bei welcher Eingabe tritt der Fehler auf?


----------



## Dagobert (10. Sep 2007)

eigentlich bei allem was ich ausprobiert habe...

Buchstaben

Zahlen

Buchstaben&Zahlen

Mal kürzer mal länger


----------



## FelixB (10. Sep 2007)

Dagobert, du Geizhals...

du sollst uns eine GANZ KONKRETE Eingabe nennen, damit wir das nachvollziehen können.

Idealerweise ungefähr so:

Eingabe: 987654321
erwartete Ausgabe: 123456789
folgende Exception trat aus: ...



mal so nebenbei: ist das jetzt DEIN Code oder der Code deiner Lehrerin?


----------



## SlaterB (10. Sep 2007)

nun, streng genommen ist 'jede Eingabe' schon mal gut,
dann kann man selber eine wählen und meckern wenn es damit nicht geht,  
geht aber mit allen nicht


----------



## Dagobert (10. Sep 2007)

Eingabe: Test
Fehler:





> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
> at Sortierverfahren.MergeSort.zusammen(MergeSort.java:41)
> at Sortierverfahren.MergeSort.teile(MergeSort.java:30)
> at Sortierverfahren.MergeSort.teile(MergeSort.java:29)
> ...



Eingabe: 54321
Fehler:





> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
> at Sortierverfahren.MergeSort.zusammen(MergeSort.java:37)
> at Sortierverfahren.MergeSort.teile(MergeSort.java:30)
> at Sortierverfahren.MergeSort.teile(MergeSort.java:29)
> ...


Eingabe: Test123
Fehler:





> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
> at Sortierverfahren.MergeSort.zusammen(MergeSort.java:41)
> at Sortierverfahren.MergeSort.teile(MergeSort.java:30)
> at Sortierverfahren.MergeSort.teile(MergeSort.java:29)
> ...



Die Methode zusammen ist von unsere Lehrerin vorgegeben (Brauchen wir im Zentral Abi net progen können sonder mehr Laufzeit und so^^) der Rest also das drumherum ist von mir eingabe ausgabe usw.


----------



## SlaterB (10. Sep 2007)

so, zwei kleine Abweichungen zur Referenzimplentierung, die mir bisher aufgefallen sind:

im Konstruktor:
teile(wort, 0, wort.length - 1);

in zusammen in der for-Deklaration:
 k = mitte+1


nachzulesen z.B. hier:
http://www.inf.fh-flensburg.de/lang/algorithmen/sortieren/merge/merge.htm


----------



## Dagobert (10. Sep 2007)

juhu es geht...
vielen danke... 

aber unsere Lehrerin hat das ne wirklich nur abgeskriptet? naja aber bei der erwarte ich nix anderes... die ist ohne ihren Zettel hilflos.... oO ???:L 

D A N K E


----------



## SlaterB (10. Sep 2007)

na es heißt Mergesort, das sind nur 5 Schritte, die man richtig anordnen kann, nix neu zu erfinden,
dafür hat sie da schon relativ viel kreativ verdreht,

fass dir lieber an die eigene Nase..


----------



## Dagobert (11. Sep 2007)

Ich fass mir oftgenug an die eingene Nase... nur von uns wird erwartet das wir alles können.... und Lehrer?

Wir hatten bis letztes Jahr auch ein Lehrer der sowas alles wuste... und jetzt muss man sich immer reinzeihen... das weiß ich auch net glaubt mir einfach...

Naja aber lassen wir das an dieser Stelle...


----------

