Eine kleine Frage

Hajar

Grünschnabel
Hallo,
ich bin dabei einpaar Übungen in Java durchzuführen.
Habe jedoch eine Frage bezüglich dieses Quellcodes,
Java:
public static int[] merge (int[] x, int[] y){
		int[] a = new int[x.length+y.length];
		int mx=0,my=0,n=0,m=0;
		for(int i=0; i<a.length;i++){
			mx=x[n];
			my=y[m];
				if(my<=mx){
					a[i]=my;
					n++;
				}
				else{
					a[i]=mx;
					m++;
				}
		}
		return a;
		
		
		}
Es soll ein aus zwei betsehenden sortierten Arrays ein neues sortiertest Array erstellen.
In der Zeile >> my=y[m];<< weist java mir ein exception Fehler und ich weiß nicht warum.
Kann mir vielleicht jemand bitte helfen ?
Lg
 
Zuletzt bearbeitet von einem Moderator:
Welche Exception?
Lass dir mal per println die verschiedenen Werte ausgeben, und teste es mit zwei einfachen Arrays z.B. x=[2,4,6] y=[1,3,5]
 
Zuletzt bearbeitet:
Salü

off-topic
Tipps zur Verwendung eines Forums:
Der Titel eines Beitrags im Forum soll aussagekräftig sein. In Google sucht niemand nach "eine kleine Frage"
Code-Teile unbedingt zwischen code-tags posten, damit wird es sauber formatiert und macht es lesbar.
"exception Fehler" hilft so auch nicht weiter, es sei denn, man führt den Code lokal aus - aber je nachdem kann man auch ohne die Ausführung des Codes weiterhelfen. Immer den Stacktrace mitposten - und normalerweise muss man auch nicht alle Zeilen mitposten, hier kann man das ganze ruhig aufs Wesentliche reduzieren.

Und hier noch ein für mich sehr wichtiger Link
http://www.catb.org/esr/faqs/smart-questions.html

Tipps zu Java:
Code wird auch sehr viel lesbarer, wenn die Namen der Variabeln entsprechend benannt werden:
a, x, y, mx, my - so muss ich mir zuerst gedanklich eine Brücke machen, was diese Namen überhaupt repräsentieren. Für so eine kleine Methode mag es ja genügen, aber irgendwann macht es keinen Spass mehr.

Gruss und sorry für den mahnenden Zeigefinger ;)
slowy
 
Das zeigt er mir als Fehler:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Uebung5.merge(Uebung5.java:9)
und die Arrays hatte ich in der main Methode auch deklariert
---
ehm und ja deine Idee gefällt mir auch gut, bin selber nicht auf sowas gekommen :p
Danke ! :D

Sorry wusste ich nicht-
werde ich in Zukunft ändern ! :)
 
Gut ArrayIndexOutofBoundsException bedeutet ja, das er versucht auf ein Arrayelement zuzugreifen, das nicht existiert. Deshalb ist es wichtig, zu wissen wie groß x.length, und y.length, sowie i,m und n sind.
Aber ich vermute, das du eine Sperre einbauen muss, die verhindert, das aus einem leeren array gelesen wird.
Angenommen, du hast die Arrays [5,6,8] und 1,2,3. Dann ist y nach dem dritten Durchlauf bereits vollständig aufgebraucht, trotzdem versuchst du auf das nächste Element des Arrays zuzugreifen.
Du könntest m++ durch while(m<y.length){m++} ersetzen (analog für n++). Allerdings ist das keine sehr schöne Lösung.
Im Prinzip musst du eine Abfrage einbauen, die falls in einem Array keine Werte mehr verfügbar sind, den Rest aus dem verbleibendem Array nimmt.

Der Link den Slowfly gepostet hat finde ich gut, aber du kannst auch die deutsche Fassung aus meiner Signatur nehmen.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück