StackOverflow - woher kommt es?

Status
Nicht offen für weitere Antworten.

frau-u

Aktives Mitglied
Hi,

Ich habe hier ein kleines Programm programmiert, was ein sogenanntes "Magisches Quadrat" ausgibt.
Komischerweise bekomme ich jedes Mal, wenn ich es mit einer geraden Zahl (2, 4, 6, 8...) ausprobiere die Fehlermeldung:
Exception in thread "main" java.lang.StackOverflowError

Hier der Code:

Code:
class MagischesQuadrat {	
	
	int[][] feld;	
	int i;
	int x, y;
	int size = 0;
	
	MagischesQuadrat(int n) {		
		
		size = n;
		feld = new int[n][n];
		i = 1;
		x = n/2;
		y = n/2+1;
		feld[x][y] = i;		
		
		for (i = 2; i<=n*n; i++) {
			if (x-1<0)
				x = n-1;
			else x = x - 1;			
			if (y + 1 > n-1)
				y = 0;
			else y = y + 1;
			setzen(x,y,n);
		}
	}		
		
	void setzen(int x, int y, int n) {
		if (feld[x][y] == 0) {
			feld[x][y] = i;
		} else {
			if (x + 1 > n-1)
				x = 0;
			else x = x + 1;			
			if (y + 1 > n-1)
				y = 0;
			else y = y + 1;
			setzen(x,y,n);
		}
	}
		
	public void print() {	
		for (x = 0; x < size; x++) {
			System.out.println("");
			for (y = 0; y < size; y++)
				System.out.print(feld[x][y] + " | ");
		}
	}	
		
	
	
	public static void main(String[] args) {		
		MagischesQuadrat mq = new MagischesQuadrat(4);
		mq.print();
	}
}

Jemand eine Ahnung woran das liegt?
Thx.
 
G

Guest

Gast
Bei 2 kommt bei mir:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at MagischesQuadrat.<init>(MagischesQuadrat.java:16) ==> feld[x][y] = i;
at MagischesQuadrat.main(MagischesQuadrat.java:54)

Und die Api meint zu StackOverFlowError:
Thrown when a stack overflow occurs because an application recurses too deeply.

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/StackOverflowError.html

Also, rufst Du Dein MagischesQuadrat wahrscheinlich endlos auf. Vielleicht hilft Dir das ja ein bißchen.
 

frau-u

Aktives Mitglied
Anonymous hat gesagt.:
Bei 2 kommt bei mir:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at MagischesQuadrat.<init>(MagischesQuadrat.java:16) ==> feld[x][y] = i;
at MagischesQuadrat.main(MagischesQuadrat.java:54)

Das ist ja noch zu verkraften. Ab 3 macht es ohnehin mehr Sinn.

Und die Api meint zu StackOverFlowError:
Thrown when a stack overflow occurs because an application recurses too deeply.

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/StackOverflowError.html

Also, rufst Du Dein MagischesQuadrat wahrscheinlich endlos auf. Vielleicht hilft Dir das ja ein bißchen.

Das ist mir ja im Prinzip klar, doch ich verstehe nicht, wo genau es hakt.
Wenn ich es im Kopf durchgehe, finde ich kein Problem.
 

abollm

Top Contributor
Schau genau, und du hast es:

Code:
...
	            y = 0;
	         else {
	         	y = y + 1; 
	         	setzen(x,y,n);
	         }
...
Du hast die Klammern bei der "Else" vergessen. Ansonsten gibt es halt 'ne Endlosschleife (oder besser gesagt endlose Verschachtelung/Rekursion).
 

frau-u

Aktives Mitglied
abollm hat gesagt.:
Schau genau, und du hast es:

Code:
...
	            y = 0;
	         else {
	         	y = y + 1; 
	         	setzen(x,y,n);
	         }
...
Du hast die Klammern bei der "Else" vergessen. Ansonsten gibt es halt 'ne Endlosschleife (oder besser gesagt endlose Verschachtelung/Rekursion).

Sorry, aber das ist Quark, allerdings ist die Einrückung auch etwas mißverständlich, muss ich zugeben.

Das if und else dient dazu, die x- und y-Werte zu bestimmten, bevor dann das "setzen(x,y,n);" aufgerufen wird.
 

abollm

Top Contributor
Ich habe deinen Code rein inhaltlich betrachtet nicht abgeklopft, klar ist aber, dass du eine Endlos-Rekursion hast, wenn der Methodenaufruf außerhalb der ELSE-Klammern steht. Lasse mich aber auch gerne eines Besseren belehren!
 
G

Guest

Gast
abollm hat gesagt.:
Ich habe deinen Code rein inhaltlich betrachtet nicht abgeklopft, klar ist aber, dass du eine Endlos-Rekursion hast, wenn der Methodenaufruf außerhalb der ELSE-Klammern steht. Lasse mich aber auch gerne eines Besseren belehren!

Hmm, ok, dann müsste vielleicht eine zusätzliche Schleife her. Mal austesten.
Thx.
 

abollm

Top Contributor
Ich nehme alles zurück und behaupte (fast) das Gegenteil:

Zitat aus Wikipedia:
Zur Konstruktion magischer Quadrate gibt es verschiedene Verfahren. Das einfachste Verfahren funktioniert für alle magischen Quadrate mit ungerader Zahl von Feldern (also 3×3, 5×5, 7×7 etc.). Man fängt oben in der Mitte mit 1 an, und füllt dann die anderen Zahlen der Reihe nach gemäß der folgenden Regel in die anderen Felder ein:

Das scheint mir der Hinweis zu sein, denn für ungerade Zeile/Spalten funktioniert dein Code.

Ich musste erst wieder inhaltlich verstehen, was genau das m.Q. bedeutet.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C StackOverflow bei Rekursion Java Basics - Anfänger-Themen 7
K MergeSort Stackoverflow Java Basics - Anfänger-Themen 5
P Compiler-Fehler StackOverFlow Java Basics - Anfänger-Themen 4
C Klassen StackOverflow bei erster Nutzung von Klassen/Konstruktoren Java Basics - Anfänger-Themen 9
M StackOverflow Problem Java Basics - Anfänger-Themen 9
F Stackoverflow bei Quicksort Java Basics - Anfänger-Themen 2
L StackOverFlow, finde Grund nicht! Java Basics - Anfänger-Themen 5
O StackOverflow für Eingabewerte berechnen Java Basics - Anfänger-Themen 3
J Stackoverflow-Abbruchbedingung Java Basics - Anfänger-Themen 7
G StackOverflow Fehler Java Basics - Anfänger-Themen 3
Y stackoverflow fehler Java Basics - Anfänger-Themen 7
G Stackoverflow! Java Basics - Anfänger-Themen 14
S Stackoverflow Error Java Basics - Anfänger-Themen 5
G Parser liefert StackOverflow error Java Basics - Anfänger-Themen 6
C StackOverflow Error, objekte öfters erzeugen Java Basics - Anfänger-Themen 6
M StackOverFlow bei JOptionPane? Java Basics - Anfänger-Themen 23
H Löschen in einem binären Baum führt zu einem StackOverflow Java Basics - Anfänger-Themen 2
P StackOverFlow - SocketTimeoutException Java Basics - Anfänger-Themen 12
P SimpleEntity und Assert, woher nehmen? Java Basics - Anfänger-Themen 8
G Woher kommt diese Eigenschaft Java Basics - Anfänger-Themen 5
T Woher nimmt das Programm die Variablenwerte???? Java Basics - Anfänger-Themen 2
D Woher kommt die 48?! Wie setz ich den Anfangswert auf 0??? Java Basics - Anfänger-Themen 8
TheMenox Error bei Scanner - woher? Java Basics - Anfänger-Themen 14
L [JFrame] Exception - woher? Java Basics - Anfänger-Themen 8
J Woher kommt das Objekt "Math" bei Math.random(); ? Java Basics - Anfänger-Themen 3
G hp nimmt daten woher?? Java Basics - Anfänger-Themen 4
A ArrayIndexOutOfBoundsException - woher kommt er?! Java Basics - Anfänger-Themen 4
J Woher kommt diese NullPointerException? Java Basics - Anfänger-Themen 6
M Woher kommt der Funktionsaufruf? Java Basics - Anfänger-Themen 2
G Woher bekomme ich passende .jar-Archive Java Basics - Anfänger-Themen 8
B Anwendungsverzeichnis woher? Java Basics - Anfänger-Themen 5
S Woher Packages bekommen? Wie installieren? (Netbeans) Java Basics - Anfänger-Themen 4
kb woher JUnit? Java Basics - Anfänger-Themen 2
R Woher bekomme ich das aktuelle Jahr oder auch Datum? Java Basics - Anfänger-Themen 4
B Woher kommt der Name Java? Java Basics - Anfänger-Themen 4
megachucky Woher bekomme ich Java (außer aus dem netz) ? Java Basics - Anfänger-Themen 12
S die java machine läuft viel zuuuu langsam, woher kommt das?? Java Basics - Anfänger-Themen 3
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
R Anfänger: Ausgabe kommt minus raus? Java Basics - Anfänger-Themen 6
P Probleme mit JUnit-Tests, es kommt was anderes raus als bei manuellen Tests Java Basics - Anfänger-Themen 5
S Wohin kommt das „abstract“? Vor oder nach „public“/ „private“ /... Java Basics - Anfänger-Themen 3
E Was kommt in ein Objekt und was in die Main Methode? Java Basics - Anfänger-Themen 8
I Schleife fragt Wert ab bis 0 kommt (mit IO.java klasse) Java Basics - Anfänger-Themen 16
L Input/Output Wieso kommt diese Ausgabe? Java Basics - Anfänger-Themen 12
V Operatoren Warum kommt bei double bei den Nachkommastellen irgendwann eine 2?! (1.20000000000002) Java Basics - Anfänger-Themen 5
V Operatoren Warum kommt nicht das gewünschte Ergebnis dieser Operation? Java Basics - Anfänger-Themen 3
J Ein Objekt zurückgeben, was kommt dabei raus ? Java Basics - Anfänger-Themen 4
S button kommt durch bild Java Basics - Anfänger-Themen 13
T Datum wird auf der Konsole richtig ausgegeben, aber im Textarea kommt ERROR Java Basics - Anfänger-Themen 8
Tacofan Hangman - ist der Buchstabe vorhanden wenn ja wo kommt er vor Java Basics - Anfänger-Themen 6
G Vertsändnisfrage zu Code - Wie kommt diese Ausgabe zustande? Java Basics - Anfänger-Themen 2
J BlueJ - kompilieren - und wie weit kommt man mit BlueJ? Java Basics - Anfänger-Themen 4
IngoF Welches Event kommt wann? Java Basics - Anfänger-Themen 8
S Kommt es zu Seiteneffekten wenn man waehrend den laufenden JUnit Tests den Code aendert? Java Basics - Anfänger-Themen 2
K Methoden ResultSet als Methodenübergabewert kommt leer an Java Basics - Anfänger-Themen 0
C For-Schleife wie kommt man auf die Lösung? Java Basics - Anfänger-Themen 2
M Erste Schritte Wie kommt man auf diese Ausgabe? Java Basics - Anfänger-Themen 3
K String kommt schon in Vector vor? Java Basics - Anfänger-Themen 36
A Input/Output Wo kommt das Newline her? Java Basics - Anfänger-Themen 7
A Wie kommt diese NullPointerException zustande? Java Basics - Anfänger-Themen 13
R Input/Output ImageIO kommt mit pic_url nicht klar Java Basics - Anfänger-Themen 10
D Was kommt raus, wenn NaN mit einer Zahl verglichen wird? Java Basics - Anfänger-Themen 5
K Arraylisten auslesen, kommt nur Quatsch raus Java Basics - Anfänger-Themen 15
X JTable in JPanel in JTabbedPane mouseevent von jtable kommt nicht durch Java Basics - Anfänger-Themen 3
S Beim kompilieren kommt Ant Build.Was ist das? Java Basics - Anfänger-Themen 8
T TCP, Empfang nur wenn wirklich etwas kommt Java Basics - Anfänger-Themen 6
R Zeit kommt mir zu lange vor... Java Basics - Anfänger-Themen 7
eXistenZ Java-Boon kommt nicht zurrecht mit der Umsetzung einer Aufgabe... Java Basics - Anfänger-Themen 7
B Warum kommt immer die 0 als Ergebnis? Was habe ich falsch gemacht? Java Basics - Anfänger-Themen 18
I Warum kommt der Fehler? Minesweeper programmieren Java Basics - Anfänger-Themen 7
K Wieso kommt ne NullPointerException Java Basics - Anfänger-Themen 3
A nach if abfrage kommt fehler Java Basics - Anfänger-Themen 8
G JFileChooser kommt doppelt Java Basics - Anfänger-Themen 3
P Wieso kommt die Fehlermeldung ".class expected"? Java Basics - Anfänger-Themen 2
P Textdateischreiben, etwas fehlt noch bzw. 1 error kommt Java Basics - Anfänger-Themen 4
J Hilfe Java Hausaufgabe kommt nicht weiter Java Basics - Anfänger-Themen 5
H Server Client, es kommt nichts an. Java Basics - Anfänger-Themen 5
B Char kommt 2 mal im Wort vor (indexOf) Java Basics - Anfänger-Themen 5
L Compilieren funktioniert, aber beim öffnen kommt nichts Java Basics - Anfänger-Themen 7
G Stringsuche: Wie häufig kommt String1 in Strin2 vor? Java Basics - Anfänger-Themen 7
U Wie oft kommt WertX int[] vor? Java Basics - Anfänger-Themen 2
G Java-1.5-Installation: warum kommt keine javac.exe mit? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben