Fehlermeldung nicht nachvollziehbar

Newcomer2

Aktives Mitglied
Hallo Leute, hab da mal nen Problem. Ich will die Methode erzeugen in sich selbst aufrufen lassen, sobald eine die Variable abbruch den Wert true zurück gibt.
Hier mal der Quelltext:
Java:
static boolean abbruch(int i)
	{
		dt2=new Date();
		if(dt2.getTime()-time>i*100)
			return true;
		else
			return false;
	}

       static void erzeugen()
	{
		int[][] feld = 
			{//Pos.0,1,2,3,4,5,6,7,8
				  {1,2,3,4,5,6,7,8,9}, // Zeile 0
				  {1,2,3,4,5,6,7,8,9}, // Zeile 1
				  {1,2,3,4,5,6,7,8,9}, // Zeile 2
				  {1,2,3,4,5,6,7,8,9}, // Zeile 3
				  {1,2,3,4,5,6,7,8,9}, // Zeile 4
				  {1,2,3,4,5,6,7,8,9}, // Zeile 5
				  {1,2,3,4,5,6,7,8,9}, // Zeile 6
				  {1,2,3,4,5,6,7,8,9}, // Zeile 7
				  {1,2,3,4,5,6,7,8,9}  // Zeile 8
			};
		for(int i=0;i<9;i++)
		{	
			for (int j=0;j<9;j++)
			{				
				l=r.nextInt(9);
				if(i==0)
				{
					if(i==0)
						while (feld[i][l]==0)
						{
							l=r.nextInt(9);
							time = dt1.getTime();
							if(abbruch(2)) { a=i; b=j; 
							erzeugen();}
						}
					sud[i][j]=feld[i][l];	
				}
                                 ...
                         }
                         ...
                 }
                 ...
         }

public static void main(String[] args) 
	{
		
			erzeugen();
		
		str+="___|_____|_____|_____|_____|_____|_____|_____|_____|";
		System.out.println(str);		
	}

Leider erhalte ich dabei immer den folgenden Fehlercode.
Kann mir da jemand weiterhelfen?

Java:
Exception in thread "main" java.lang.StackOverflowError
	at Sudoku.erzeugen(Sudoku.java:52)
	at Sudoku.erzeugen(Sudoku.java:61)
	at Sudoku.erzeugen(Sudoku.java:61)
 

Barista

Top Contributor
Hallo Newcomer2,

in Zeile 37 Deines Listings rufst Du die Methode erzeugen noch mal auf, das verursacht den Stackoverflow.

Ganz allgemein scheint Dein Programm aber auch nicht korrekt zu sein.

Willst Du mit Rekursion arbeiten bzw weisst Du was Rekursion ist?

Willst Du ein gültiges Sudoku erzeugen, also jeder Wert je Zeile, Spalte und Block nur einmal gesetzt?

Wenn Du möchtest, können wir hier zusammen eine Lösung erarbeiten.

Bis dann
 

Newcomer2

Aktives Mitglied
@ JavaMeister: Wie führ ich denn ein Debug aus? Hab das noch nie gemacht, bisher Probleme immer so gelöst bekommen ^^

@ Barista: Die Sache ist die, das Programm läuft eig. ganz reibungslos. Ich bekomme richtige Sudokus heraus. Das Problem kommt erst dann, wenn die Methode erzeugen() zur Ermittlung einer passenden Zufallszahl länger als z.B. 200ms benötigt. Denn dann möcht ich gern, dass sie von Beginn an neu startet. Ich hab da schon verschiedene Dinge versucht, aber noch keine richtige Lösung gefunden.
Habs auch mal mit
Code:
return;
versucht. Auch das hat nicht funktioniert.

Um was es sich genau bei Rekursion handelt, weiß ich leider nicht. Aber dachte, damit ist gemeint, dass sich eine Methode selbst aufruft.

Will hier mal als Beispiel nen Programm zeigen, was ich zuvor geschrieben hab. Bin kein so neuer Einsteiger in Java ^^
 

Anhänge

  • SnakeV2.jar
    19,9 KB · Aufrufe: 0

Barista

Top Contributor
@ Barista: Die Sache ist die, das Programm läuft eig. ganz reibungslos. Ich bekomme richtige Sudokus heraus. Das Problem kommt erst dann, wenn die Methode erzeugen() zur Ermittlung einer passenden Zufallszahl länger als z.B. 200ms benötigt. Denn dann möcht ich gern, dass sie von Beginn an neu startet. Ich hab da schon verschiedene Dinge versucht, aber noch keine richtige Lösung gefunden.
Habs auch mal mit return; versucht. Auch das hat nicht funktioniert.

Du machst einfach eine Schleife um den Aufruf Deiner erzeuge-Methode


Java:
while ( ! erzeuge() );

Deine erzeuge-Methode stattest Du mit einem boolean-return für
ok bzw nicht-ok aus.
 

Newcomer2

Aktives Mitglied
Vielen dank Barista.
Das funktioniert sehr gut. Manchmal schien er sich dennoch an irgendeiner Stelle festzufahren und arbeitete nicht weiter. Hab hier mal vorsichtshalber den vollständigen Code angefügt. Etwa um die Zeilen 105 bis 113, also bei der ersten
Code:
while
-Schleife, wenn das Programm länger benötigt als 2000ms.

Hatte dann aber mal bei der
Code:
abbruch()
-Methode einen
Code:
return
-Status weggenommen und nun bekomme ich nur noch richtige Sudokus:


Java:
import java.util.Random;
import java.util.Date;
	
public class Sudoku 
{
	static int[][] feld = 
		{//Pos.0,1,2,3,4,5,6,7,8
			  {1,2,3,4,5,6,7,8,9}, // Zeile 0
			  {1,2,3,4,5,6,7,8,9}, // Zeile 1
			  {1,2,3,4,5,6,7,8,9}, // Zeile 2
			  {1,2,3,4,5,6,7,8,9}, // Zeile 3
			  {1,2,3,4,5,6,7,8,9}, // Zeile 4
			  {1,2,3,4,5,6,7,8,9}, // Zeile 5
			  {1,2,3,4,5,6,7,8,9}, // Zeile 6
			  {1,2,3,4,5,6,7,8,9}, // Zeile 7
			  {1,2,3,4,5,6,7,8,9}  // Zeile 8
		};
	static int[][] sud = new int[9][9];
	static Random r = new Random();
	static String str=" ___________________________________________________\n|";
	static int l=0,a=0,b=0;
	static Date dt1 = new Date(),dt2;
	static long time;
	
	@SuppressWarnings("unused")
	static boolean abbruch(int i)
	{
		dt2=new Date();
		if(dt2.getTime()-time>i*100)
		{	
			for(int j=0;j<9;j++)
			{
				for(int k=0;k<9;k++)
				{
					if(sud[j][k]!=0)
						return false;
					else return true;
				}
			}
			return false;
		}
		else return false;
	}
	
	static int[][] sud0()
	{
		int[][] sudneu = 
			{
				{0,0,0,0,0,0,0,0,0},
				{0,0,0,0,0,0,0,0,0},
				{0,0,0,0,0,0,0,0,0},
				{0,0,0,0,0,0,0,0,0},
				{0,0,0,0,0,0,0,0,0},
				{0,0,0,0,0,0,0,0,0},
				{0,0,0,0,0,0,0,0,0},
				{0,0,0,0,0,0,0,0,0},
				{0,0,0,0,0,0,0,0,0}
			};
		return sudneu;
	}
	
	static int[][] neuesFeld()
	{
		int[][] neu = 
			{//Pos.0,1,2,3,4,5,6,7,8
				  {1,2,3,4,5,6,7,8,9}, // Zeile 0
				  {1,2,3,4,5,6,7,8,9}, // Zeile 1
				  {1,2,3,4,5,6,7,8,9}, // Zeile 2
				  {1,2,3,4,5,6,7,8,9}, // Zeile 3
				  {1,2,3,4,5,6,7,8,9}, // Zeile 4
				  {1,2,3,4,5,6,7,8,9}, // Zeile 5
				  {1,2,3,4,5,6,7,8,9}, // Zeile 6
				  {1,2,3,4,5,6,7,8,9}, // Zeile 7
				  {1,2,3,4,5,6,7,8,9}  // Zeile 8
			};
		return neu;
	}
	
	static boolean erzeugen()
	{
		dt1 = new Date();
		time = dt1.getTime();
		System.out.println(time);
		feld=neuesFeld();
		for(int i=0;i<9;i++)
		{
			for(int j=0;j<9;j++)
			{
				System.out.print(sud[i][j]+"  |  ");
			}
			System.out.print("\n");
		}
		if(sud[8][8]!=0) return true;
		
		System.out.print("\n");		
		sud=sud0();
		for(int i=0;i<9;i++)
		{	
			for (int j=0;j<9;j++)
			{	
				
				l=r.nextInt(9);
				if(i==0)
				{
					while (feld[i][l]==0)
					{
						l=r.nextInt(9);
						if(abbruch(20)) {			
							a=i; b=j;  
							System.out.println(i+"   "+feld[i][j]); 
							return false;
						}
					}
					sud[i][j]=feld[i][l];	
				}
				if(i==1)
				{
					if(j==0|j==3|j==6)
						while (feld[i][l]==0|sud[i-1][j  ]==feld[i][l]|
											 sud[i-1][j+1]==feld[i][l]|
											 sud[i-1][j+2]==feld[i][l])
						{
							l--;
							if(l<0) l=8;
							if(abbruch(20)) 
							{  
								a=i; b=j; 
								System.out.println(i+"  "+feld[i][j]); 
								return false;
							}
							else;
						}
					if(j==1|j==4|j==7)
						while (feld[i][l]==0|sud[i-1][j  ]==feld[i][l]|
										     sud[i-1][j+1]==feld[i][l]|
										     sud[i-1][j-1]==feld[i][l])
						{
							l++;
							if(l>8) l=0;
							if(abbruch(2)) 
							{ 
								a=i; b=j; 
								System.out.println(i+"  "+feld[i][j]); 
								return false;
							}
							else ;
						}
					if(j==2|j==5|j==8)
						while (feld[i][l]==0|sud[i-1][j  ]==feld[i][l]|
											 sud[i-1][j-1]==feld[i][l]|
											 sud[i-1][j-2]==feld[i][l])
						{
							l--;
							if(l<0) l=8;
							if(abbruch(2)) 
							{ 
								a=i; b=j; 
								System.out.println(i+"  "+feld[i][j]); 
								return false;
							}
						}
					sud[i][j]=feld[i][l];	
				}
				if(i==2)
				{
					if(j==0|j==3|j==6)
						while (feld[i][l]==0|sud[i-1][j  ]==feld[i][l]|
											 sud[i-2][j  ]==feld[i][l]|
											 sud[i-1][j+1]==feld[i][l]|
											 sud[i-2][j+1]==feld[i][l]|
											 sud[i-1][j+2]==feld[i][l]|
											 sud[i-2][j+2]==feld[i][l])
						{
							l++;
							if(l>8) l=0;
							if(abbruch(2)) { a=i; b=j; return false;}
						}
					if(j==1|j==4|j==7)
						while (feld[i][l]==0|sud[i-1][j  ]==feld[i][l]|
						 					 sud[i-2][j  ]==feld[i][l]|
						 					 sud[i-1][j-1]==feld[i][l]|
											 sud[i-2][j-1]==feld[i][l]|
											 sud[i-1][j+1]==feld[i][l]|
											 sud[i-2][j+1]==feld[i][l])
						{
							l--;
							if(l<0) l=8;
							if(abbruch(2)) 
							{ 
								a=i; b=j; 
								return false;
							}
						}
					if(j==2|j==5|j==8)
						while (feld[i][l]==0|sud[i-1][j  ]==feld[i][l]|
						 					 sud[i-2][j  ]==feld[i][l]|
						 					 sud[i-1][j-1]==feld[i][l]|
											 sud[i-2][j-1]==feld[i][l]|
											 sud[i-1][j-2]==feld[i][l]|
											 sud[i-2][j-2]==feld[i][l])
						{
							l++;
							if(l>8) l=0;
							if(abbruch(2)) 
							{  
								a=i; b=j; return false;
							} 
						}
					sud[i][j]=feld[i][l];
					
					
				}
				if(i>2)
				{
					if(j==0|j==1|j==3|j==4|j==6|j==7)
					{
						if(i==3|i==6)
							sud[i][j]=sud[i-1][j+1];
						if(i==4|i==7)
							sud[i][j]=sud[i-4][j+1];
						if(i==5|i==8)
							sud[i][j]=sud[i-4][j+1];
					}
					if(j==2|j==5|j==8)
					{
						if(i==3|i==6)
							sud[i][j]=sud[i-1][j-2];
						if(i==4|i==7)
							sud[i][j]=sud[i-4][j-2];
						if(i==5|i==8)
							sud[i][j]=sud[i-4][j-2];
					}
				}
				feld[i][l]=0;				
				str+=sud[i][j]+"  |  ";
			}
			str+="\n|";
		}
		return true;
	}
	
	public static void main(String[] args) 
	{
		while(!erzeugen()) ;
		{
		}
		str=" ___________________________________________________\n|";
		for(int i=0;i<9;i++)
		{
			for(int j=0;j<9;j++)
			{
				str+=sud[i][j]+"  |  ";
			}
			str+="\n|";
		}
				
		System.out.println(erzeugen()+"  "+sud[a][b]+"  "+a+"  "+b);
		str+="___|_____|_____|_____|_____|_____|_____|_____|_____|";
		System.out.println(str);		
	}
}

Hier dann die überarbeitete
Code:
abbruch()
-Methode:
Java:
@SuppressWarnings("unused")
	static boolean abbruch(int i)
	{
		dt2=new Date();
		if(dt2.getTime()-time>i*100)
		{	
			for(int j=0;j<9;j++)
			{
				for(int k=0;k<9;k++)
				{
					if(sud[j][k]!=0) ; //<-- geändert!
					else return true;
				}
			}
			return false;
		}
		else return false;
	}
und nun funktionierts :)
vielen dank nochmal für die Hilfe!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
EchtKeineAhnungManchmal Hallo :) ich bekomme es nicht hin eine Fehlermeldung auszugeben über die GUI Java Basics - Anfänger-Themen 3
A Fehlermeldung Unklar, google hilft auch nicht weiter Java Basics - Anfänger-Themen 2
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
E Fehlermeldung und Fenster wird nicht mehr angezeigt Java Basics - Anfänger-Themen 12
B Java-Basics --> Fehlermeldung nicht verständlich! Java Basics - Anfänger-Themen 8
E Fehlermeldung: variable wird nicht initalisiert obwohl sie deklariert ist Java Basics - Anfänger-Themen 9
J Fehlermeldung: Applet nicht initialisiert Java Basics - Anfänger-Themen 24
A Bild wird auf Frame nicht angezeigt! Keine Fehlermeldung Java Basics - Anfänger-Themen 3
G Fehlermeldung zu Klasse die es nicht gibt Java Basics - Anfänger-Themen 3
P Fehlermeldung: Symbol kann nicht aufgelöst werden Java Basics - Anfänger-Themen 2
Ronny123 Erste Schritte Fehlermeldung Java Basics - Anfänger-Themen 1
F Fehlermeldung in Eclipse Java Basics - Anfänger-Themen 13
AllBlack Fehlermeldung Java Basics - Anfänger-Themen 19
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
J Fehlermeldung unverständlich für Jakarta Java Basics - Anfänger-Themen 17
Ostkreuz Fehlermeldung Java Basics - Anfänger-Themen 1
_so_far_away_ Fehlermeldung "Index 2 out of bounds for length 2" Java Basics - Anfänger-Themen 7
W Texteingabe - Bedeutung Fehlermeldung, Lösung? Java Basics - Anfänger-Themen 18
krgewb Fehlermeldung in web.xml Java Basics - Anfänger-Themen 4
W Warum diese Fehlermeldung? Java Basics - Anfänger-Themen 12
nbergmann Unverständliche Fehlermeldung Java Basics - Anfänger-Themen 56
E fehlermeldung bei richtigen login daten Java Basics - Anfänger-Themen 7
J Fehlermeldung im Checkstyle Java Basics - Anfänger-Themen 11
S Fehlermeldung Java Basics - Anfänger-Themen 7
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
C Fehlermeldung Array zuweisen und printen Java Basics - Anfänger-Themen 22
J Fehlermeldung Java Basics - Anfänger-Themen 22
J Fehlermeldung: A JNI error Java Basics - Anfänger-Themen 3
R Fehlermeldung aber WO liegt der Fehler? Java Basics - Anfänger-Themen 7
JavaClara Fehlermeldung bei split-Methode Java Basics - Anfänger-Themen 12
F Fehlermeldung java.lang.NullPointerException Java Basics - Anfänger-Themen 4
C Fehlermeldung InOut. Java Basics - Anfänger-Themen 7
B Methoden if-statement error, FX, Fehlermeldung Java Basics - Anfänger-Themen 6
A Fehlermeldung Java Basics - Anfänger-Themen 5
H Comparator Fehlermeldung Java Basics - Anfänger-Themen 5
D Folgende Fehlermeldung bei der Installation von JAVAFX Java Basics - Anfänger-Themen 1
M Java heap space Fehlermeldung beheben Java Basics - Anfänger-Themen 3
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
T Fehlermeldung beim Versuch, einen String einzulesen Java Basics - Anfänger-Themen 4
S Bitte Hilfe zu Fehlermeldung am Handy Java Basics - Anfänger-Themen 2
H fehlermeldung Java Basics - Anfänger-Themen 447
H fehlermeldung Java Basics - Anfänger-Themen 9
T Fehlermeldung beim Starten von FlashTool Java Basics - Anfänger-Themen 27
C Fehlermeldung mit Intger. Java Basics - Anfänger-Themen 3
A Fehlermeldung Java Basics - Anfänger-Themen 3
D Wie kann man eine solche Fehlermeldung abfangen Java Basics - Anfänger-Themen 4
H Fehlermeldung bei der Ausführung eines Compilierten PRGs Java Basics - Anfänger-Themen 9
N Fehlermeldung beim ausführen des Programmes.. Java Basics - Anfänger-Themen 3
x-tshainge Fehlermeldung Java Basics - Anfänger-Themen 2
M Erste Schritte NetBeans Fehlermeldung Java Basics - Anfänger-Themen 2
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
N Fehlermeldung bei Methode Java Basics - Anfänger-Themen 12
I String index out of range Fehlermeldung Java Basics - Anfänger-Themen 4
I Fehlermeldung bei Darstellung von Arrays Java Basics - Anfänger-Themen 2
S Variablen JLabel backImagePanel Fehlermeldung Java Basics - Anfänger-Themen 3
A checkstyle Fehlermeldung Java Basics - Anfänger-Themen 1
G Compiler-Fehler Fehlermeldung Java Basics - Anfänger-Themen 3
Pr0m3theus Fehlermeldung ArrayList add Java Basics - Anfänger-Themen 12
Arabicabohne Fehlermeldung bei Eclipse Java Basics - Anfänger-Themen 23
lBlKha0s Fehlermeldung : class interface or enum expected Java Basics - Anfänger-Themen 9
TheMenox Fehlermeldung / Arrays, Enhanced For Loops Java Basics - Anfänger-Themen 16
D Compiler-Fehler Anfänger Fehlermeldung Java Basics - Anfänger-Themen 3
Henri Fehlermeldung Java Basics - Anfänger-Themen 2
K Erste Schritte Fehlermeldung Java Basics - Anfänger-Themen 2
I Fehlermeldung: Java does not contain a main type Java Basics - Anfänger-Themen 1
J Fehlermeldung : cannot invoke char(at) int on the primitive type int --- Anfänger Java Basics - Anfänger-Themen 5
J Bug? Seltsame Fehlermeldung Java Basics - Anfänger-Themen 7
J Fehlermeldung else without if Java Basics - Anfänger-Themen 5
J while(nst == 0) gibt Fehlermeldung Java Basics - Anfänger-Themen 4
L Fehlermeldung Java Basics - Anfänger-Themen 6
D Erste Schritte Fehlermeldung "Syntax error on token ";", { expected after this token" Java Basics - Anfänger-Themen 13
J Launcher Fehlermeldung Java Basics - Anfänger-Themen 0
H Compiler-Fehler Fehlermeldung Kompilier Java Basics - Anfänger-Themen 4
A Fehlermeldung Unklar. Java Basics - Anfänger-Themen 1
D Integer Fehlermeldung exception Java Basics - Anfänger-Themen 4
A Fehlermeldung beim aufruf der main Methode Java Basics - Anfänger-Themen 17
D Fehlermeldung beim Ausführen eines Java Programms Java Basics - Anfänger-Themen 4
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
S Vererbung Fehlermeldung: the hierarchy of the type "class name" is inconsistent Java Basics - Anfänger-Themen 10
D Fehlermeldung "com.element.JavaUpload.Manager" Java Basics - Anfänger-Themen 1
S Fehlermeldung bei format methode Java Basics - Anfänger-Themen 1
A Compiler-Fehler Fehlermeldung auf Mac Java Basics - Anfänger-Themen 3
K JDBC - Wie ist Fehlermeldung zu interpretieren Java Basics - Anfänger-Themen 3
O Methoden Fehlermeldung(Illegal start of expression) bei 4-Gewinnt-Spiel Java Basics - Anfänger-Themen 5
S Class File Editor gibt beim Start der Programms die Fehlermeldung Source not found aus Java Basics - Anfänger-Themen 1
C addActionListener(this) - Fehlermeldung Java Basics - Anfänger-Themen 8
C Array List mit String vergleichen und Fehlermeldung ausgeben Java Basics - Anfänger-Themen 6
X Einfach verkettete Liste, keine Fehlermeldung Programm friert ein Java Basics - Anfänger-Themen 4
G Variablen Warum bekomme ich da eine Fehlermeldung? Java Basics - Anfänger-Themen 3
C GUI - SWT - Button-Fehlermeldung Java Basics - Anfänger-Themen 5
F Input/Output IOTools Fehlermeldung: cannot be resolved Java Basics - Anfänger-Themen 16
K Erste Schritte Datei gelöscht - nun Fehlermeldung Java Basics - Anfänger-Themen 2
S Fehlermeldung Java Basics - Anfänger-Themen 8
E Fehlermeldung Java Basics - Anfänger-Themen 13
K Transparents Bild laden -> Fehlermeldung Java Basics - Anfänger-Themen 6
J Fehlermeldung reagieren Java Basics - Anfänger-Themen 10
F Array Fehlermeldung... Java Basics - Anfänger-Themen 2
B Fehlermeldung bei Klasse mit array Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben