StackOverflowError

Status
Nicht offen für weitere Antworten.

Gaston

Aktives Mitglied
Hi,

ich wollte allgemein fragen. ob man einen StackOverflowError dadurch vermeiden kann indem man einfach den Stack vergrößert? Heißt der Befehl "-mess"? Oder ist dies nicht möglich, da man bei Java kaum auf Systemresourcen zugreifen kann. Ich freue mich auf eure Antworten

Gruß

Gaston
 

Sky

Top Contributor
Die Frage läßt sich pauschal nicht beantworten. Wenn du eine sog. "Endlosschleife" in deinem Programm hast, dann kann der Stack noch so groß sein, irgendwann isser voll...
 

Gaston

Aktives Mitglied
Also das ist mein Quellcode. ich weiß der ist riesig deshalb erwarte ich auch keine Wunder! Damit wird Reversi realisiert- Das Problem ist es hängt sich mit einem StackOverflowError auf- und ich finde den Fehler nicht. Wenn jemandem was auffällt was diesen Fehler auslösen kann, dann würde ich mich sehr über einen Tipp freuen!


Gruß


Gaston


Code:
import java.awt.*;
import java.awt.event.*; 
import javax.swing.*;


public class RevSpielfeldx extends JApplet implements MouseListener{// JInternalFrame
	
//Instanzvariablen
	
	static int zähler = 0;
	static int Höhe = 10;//RevStartx.tse;
	int Breite =Höhe;
	Felder[][] SFeld = new Felder[Höhe][Breite];
	//JButton[][] SFeld = new JButton[Höhe][Breite];

	JTextField zug;
	JTextField test;
	JTextField test2;
	//Gasis Änderung 1
	JTextField spielerdran;
	//ReversiMaster des;
	
	int aktspieler=0;
	
	int FeldKoordinate;
	
//---Init-Methode---------------------------------------------------------------
	public RevSpielfeldx(){//ReversiMaster df) {
		
		//des = df;
		
		setSize(600,400);
		
	//	setIconifiable(true);
	/*	setDefaultCloseOperation(
			JInternalFrame.DISPOSE_ON_CLOSE
			);*/
			
	
			
		JSplitPane main =new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);			//Das Fenster wird durch eine 
																				//JSplitPane geteilt
				
			JPanel spielfeld = new JPanel(); 									//Die linke Seite zeigt das  
				spielfeld.setMinimumSize(new Dimension(400,400));				//Spielfeld
				spielfeld.setPreferredSize(new Dimension(400,400));
				spielfeld.setLayout(new BorderLayout(1,1));
		
				JPanel center = new JPanel();
					center.setLayout(new GridLayout(Höhe,Breite));
					center.setSize(400,400);
						
						
						
		
					//SFeld[Höhe-1][Breite-1]=new Felder();	
					
					for (int i=0; i<Höhe; i++){							//Baut Spielfeld
						for(int j =0; j<Breite; j++){					//mit Hilfe der Klasse
																		//"Felder" auf
							SFeld[i][j] = new Felder(i,j);				
							SFeld[i][j].addMouseListener(this);
							center.add(SFeld[i][j]);
							
						}
					}
						
					SFeld[Höhe/2][Breite/2].setState(1);							//Baut Startaufstellung 
					SFeld[Höhe/2][Breite/2-1].setState(0);							//auf
					SFeld[Höhe/2-1][Breite/2].setState(0);
					SFeld[Höhe/2-1][Breite/2-1].setState(1);
					
					//sucheZüge();
				spielfeld.add(center);
			
			
			
			JPanel status =new JPanel();								//Die rechte Seite ist für
				status.setMinimumSize(new Dimension(200,400));			//Statusanzeigen vorgesehen
				status.setPreferredSize(new Dimension(200,400));
				
				zug =new JTextField("Spielzug: "+(zähler+1),13);
				zug.setEditable(false);
				test =new JTextField("Feld: ",13);
				test.setEditable(false);
				test2 =new JTextField("State: ",13);
				test2.setEditable(false);
				spielerdran=new JTextField(zähler%2==0?"Spieler1 ist am Zug":"Spieler2 ist am Zug",13);
				spielerdran.setEditable(false);
				status.add(zug);	
				status.add(test);
				status.add(test2);
				status.add(spielerdran);
				
		main.setLeftComponent(spielfeld);
		main.setRightComponent(status);
		
		Container ois=getContentPane();
		ois.add(main);
		
		JMenuBar mb = new JMenuBar();										//Hier wird das Menu gebaut	
			JMenu datei = new JMenu("Datei");
			datei.setMnemonic('D');
				JMenuItem neu = new JMenuItem("Neues Spiel");
					neu.setMnemonic('N');
					neu.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent e){
							//des.addChild(new RevStartx(), 20,20);
						}});

				JMenuItem save= new JMenuItem("Speichern");
					save.setMnemonic('S');
				JMenuItem load= new JMenuItem("Laden");
					load.setMnemonic('L');
				JMenuItem quit= new JMenuItem("Beenden");
				quit.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent e){
							setVisible(false);
						}});
				datei.add(neu);
				datei.addSeparator();
				datei.add(save);
				datei.add(load);
				datei.addSeparator();
				datei.add(quit);
			JMenu option = new JMenu("Optionen");
			option.setMnemonic('p');
				JMenuItem undo = new JMenuItem("Undo");
					undo.setMnemonic('U');
				JMenu stauf= new JMenu("Startaufstellung");
					stauf.setMnemonic('t');
						JMenuItem kla =new JMenuItem("klassisch");
						JMenuItem mod =new JMenuItem("modern");					
						stauf.add(kla);
						stauf.add(mod);
			 	option.add(undo);
			 	option.addSeparator();
			 	option.add(stauf);
			 JMenu frage = new JMenu ("?");
			 	JMenuItem about = new JMenuItem("About");
			 	JMenuItem zusp = new JMenuItem("Über das Spiel");
			 	frage.add(zusp);
			 	frage.addSeparator();
			 	frage.add(about);
			mb.add(datei);
			mb.add(option);
			mb.add(frage);
		setJMenuBar(mb);
			 
		setVisible(true);
		sucheNachSetzbarenFeldern();
	}



//---Main-Methode---------------------------------------------------------------
	public static void main(String[] args) {
		 
		Konsole.run(new RevSpielfeldx(),600,400);
		
	}

//---Methoden-------------------------------------------------------------------




	
	public void mouseExited(MouseEvent e){
	}

	public void mouseEntered(MouseEvent e){
	}

	public void mouseReleased(MouseEvent e){
	}

	public void mousePressed(MouseEvent e){
	}

	public void mouseClicked(MouseEvent e){
		
			Felder eld = (Felder)e.getSource();

		   int x = eld.getIDx();
		   int y = eld.getIDy();
			spielroutine(x,y);
		}
	
	
	
	public int überprüfeNachbar(int x, int y, int richtung){
		
		/*Richtung kann von 0-7 gewählt werden.
		 *Hierbei gilt:
		 *		0: unten
		 *		1: links unten
		 *		2: links
		 *		3: links oben
		 *		4: rechts unten
		 *		5: rechts
		 *		6: rechts oben
		 *		7: oben
		 */
		
		int nState =3;
		 
		if (richtung==0){
			if(y>0){
				nState= SFeld[x][y-1].getState();
			}
		}
		
		return nState;
	} 
	
//	public static reverse (){
//	}
		
		
		//Gasis krasse Funktionen
		
	public void sucheNachSetzbarenFeldern(){
	
		for(int i=0;i<Höhe;i++){
			for(int j=0;j<Breite;j++){
				//Prüfe ob das Feld leer ist
				if(SFeld[i][j].getState()==2){
					//Wenn zähler%2==0 dann ist Spieler1 dran ansonsten Spieler2
					if(zähler%2==0){
						System.out.println("hallo");
							//Wenn unter dem leeren Feld ein Feld mit dem Status 1 ist
					überprüfenachunten(0,1);
					überprüfenachoben(0,1);		
					überprüfenachlinks(0,1);
					überprüfenachrechts(0,1);
					überprüfediagonallinksoben(0,1);
					überprüfediagonallinksunten(0,1);
					//überprüfediagonalrechtsoben(0,1);
					//überprüfediagonalrechtsunten(0,1);
					}
					//Spieler 2 ist dran
					else{
					überprüfenachunten(1,0);
					überprüfenachoben(1,0);		
					überprüfenachlinks(1,0);
					überprüfenachrechts(1,0);
					überprüfediagonallinksoben(1,0);
					überprüfediagonallinksunten(1,0);
					//überprüfediagonalrechtsoben(1,0);
					//überprüfediagonalrechtsunten(1,0);
					
					}
				}
			}
		}
				
	
	}
	
	public void überprüfenachunten(int eigenerStein,int gegnerischerStein){		
			for(int i=0;i<Höhe;i++){
				for(int j=0;j<Breite;j++){
						if(SFeld[i][j].getState()==2){
							if(i+1<Höhe&&SFeld[i+1][j].getState()==gegnerischerStein){
							
								//Beginn der Überprüfung ob nach unten ob Steine gesetzt werden können
								//Und in der Reihe ein Stein mit dem Status 0 kommt
							
								for(int gehenachunten=i+2;gehenachunten<Höhe;gehenachunten++){
							
									if(gehenachunten<Höhe&&SFeld[gehenachunten][j].getState()==eigenerStein){
										SFeld[i][j].setBackground(Color.YELLOW);
										SFeld[i][j].setState(3);
										break;
									}
							
									//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
									if(gehenachunten<Höhe&&SFeld[gehenachunten][j].getState()==2){
										break;
									}
								}//Ende der for-Schleife
								//Ende der Überprüfung ob nach unten ob Steine gesetzt werden können
							
								//Wenn über dem leeren Feld ein Feld mit dem Status 1 ist
								}
								}
							}
						}
	}
	
	
	public void überprüfenachoben(int eigenerStein,int gegnerischerStein){
		for(int i=0;i<Höhe;i++){
			for(int j=0;j<Breite;j++){
				if(SFeld[i][j].getState()==2){
								//Beginn der Überprüfung ob nach oben ob Steine gesetzt werden können
								//Und in der Reihe ein Stein mit dem Status 0 kommt
							//Wenn über dem leeren Feld ein Feld mit Status 1 ist
							if(i-1>=0&&SFeld[i-1][j].getState()==gegnerischerStein){
								System.out.println("oben");
								for(int gehenachoben=i-2;gehenachoben>0;gehenachoben--){
									if(gehenachoben>=0&&SFeld[gehenachoben][j].getState()==eigenerStein){
										SFeld[i][j].setBackground(Color.YELLOW);
										SFeld[i][j].setState(3);
										break;
									}
							
									//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
									if(gehenachoben<Höhe&&SFeld[gehenachoben][j].getState()==2){
										break;
									}
								}//Ende der for-Schleife
							}
							//Ende der Überprüfung ob nach oben ob Steine gesetzt werden können
						}
						}
					}
				}
				
		public void überprüfenachlinks(int eigenerStein,int gegnerischerStein){
			for(int i=0;i<Höhe;i++){
				for(int j=0;j<Breite;j++){
						if(SFeld[i][j].getState()==2){
							if(j-1>=0&&SFeld[i][j-1].getState()==gegnerischerStein){
							
								//Beginn der Überprüfung ob nach unten ob Steine gesetzt werden können
								//Und in der Reihe ein Stein mit dem Status 0 kommt
							
								for(int gehenachlinks=j-2;gehenachlinks<Höhe;gehenachlinks--){
							
									if(gehenachlinks>=0&&SFeld[i][gehenachlinks].getState()==eigenerStein){
										SFeld[i][j].setBackground(Color.YELLOW);
										SFeld[i][j].setState(3);
										break;
									}
							
									//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
									if(gehenachlinks>=0&&SFeld[i][gehenachlinks].getState()==2){
										break;
									}
								}//Ende der for-Schleife
								//Ende der Überprüfung ob nach unten ob Steine gesetzt werden können
							
								//Wenn über dem leeren Feld ein Feld mit dem Status 1 ist
								}
								}
							}
						}
		}
		
		public void überprüfenachrechts(int eigenerStein,int gegnerischerStein){
			for(int i=0;i<Höhe;i++){
				for(int j=0;j<Breite;j++){
					if(SFeld[i][j].getState()==2){
							if(j+1<Breite&&SFeld[i][j+1].getState()==gegnerischerStein){
							
								//Beginn der Überprüfung ob nach unten ob Steine gesetzt werden können
								//Und in der Reihe ein Stein mit dem Status 0 kommt
							
								for(int gehenachrechts=j+2;gehenachrechts<Breite;gehenachrechts++){
							
									if(gehenachrechts>=0&&SFeld[i][gehenachrechts].getState()==eigenerStein){
										SFeld[i][j].setBackground(Color.YELLOW);
										SFeld[i][j].setState(3);
										break;
									}
							
									//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
									if(gehenachrechts<Breite&&SFeld[i][gehenachrechts].getState()==2){
										break;
									}
								}//Ende der for-Schleife
								//Ende der Überprüfung ob nach unten ob Steine gesetzt werden können
							
								//Wenn über dem leeren Feld ein Feld mit dem Status 1 ist
								}
								}
							}
						}
		}
		
		public void überprüfediagonalrechtsoben(int eigenerStein,int gegnerischerStein){
			for(int i=0;i<Höhe;i++){
						for(int j=0;j<Breite;j++){
						
				if(SFeld[i][j].getState()==2){
							if((i-1>=0)&&(j+1<Breite)&&(SFeld[i-1][j+1].getState()==gegnerischerStein)){
							
								//Beginn der Überprüfung ob nach unten ob Steine gesetzt werden können
								//Und in der Reihe ein Stein mit dem Status 0 kommt
								int gehenachrechtsoben_rechts=j+2;
								for(int gehenachrechtsoben=i-2;gehenachrechtsoben<Breite;gehenachrechtsoben--){
							
									if((gehenachrechtsoben>0)&&(gehenachrechtsoben_rechts+2<Breite)){
										if(SFeld[gehenachrechtsoben][gehenachrechtsoben_rechts].getState()==eigenerStein){
											SFeld[i][j].setBackground(Color.YELLOW);
											SFeld[i][j].setState(3);
											break;
										}
									}
							
									//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
									if((gehenachrechtsoben>0)&&(gehenachrechtsoben_rechts+2<Breite)){
										if(SFeld[gehenachrechtsoben][gehenachrechtsoben_rechts].getState()==2){
											break;
										}
									}
									gehenachrechtsoben_rechts++;
								}//Ende der for-Schleife
								//Ende der Überprüfung ob nach unten ob Steine gesetzt werden können
							
								//Wenn über dem leeren Feld ein Feld mit dem Status 1 ist
								}
							}
						}
					}
					
		
		}
		public void überprüfediagonalrechtsunten(int eigenerStein,int gegnerischerStein){
			for(int i=0;i<Höhe;i++){
						for(int j=0;j<Breite;j++){
						
				if(SFeld[i][j].getState()==2){
							if((i+1<Höhe)&&(j+1<Breite)&&(SFeld[i+1][j+1].getState()==gegnerischerStein)){
							
								//Beginn der Überprüfung ob nach unten ob Steine gesetzt werden können
								//Und in der Reihe ein Stein mit dem Status 0 kommt
								int gehenachrechtsunten_rechts=j+2;
								for(int gehenachrechtsunten=i+2;gehenachrechtsunten<Breite;gehenachrechtsunten++){
							
									if((gehenachrechtsunten<Höhe)&&(gehenachrechtsunten_rechts+2<Breite)){
										if(SFeld[gehenachrechtsunten][gehenachrechtsunten_rechts].getState()==eigenerStein){
											SFeld[i][j].setBackground(Color.YELLOW);
											SFeld[i][j].setState(3);
											break;
										}
									}
							
									//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
									if((gehenachrechtsunten>=0)&&(gehenachrechtsunten_rechts<Breite)){
										if(SFeld[gehenachrechtsunten][gehenachrechtsunten_rechts].getState()==2){
											break;
										}
									}
									gehenachrechtsunten_rechts++;
								}//Ende der for-Schleife
								//Ende der Überprüfung ob nach unten ob Steine gesetzt werden können
							
								//Wenn über dem leeren Feld ein Feld mit dem Status 1 ist
								}
						}
					}
				}
				
		
		
		}	
		public void überprüfediagonallinksoben(int eigenerStein,int gegnerischerStein){
			for(int i=0;i<Höhe;i++){
						for(int j=0;j<Breite;j++){
						
				if(SFeld[i][j].getState()==2){
			
							if((i-1>=0)&&(j-1>=0)&&(SFeld[i-1][j-1].getState()==gegnerischerStein)){
							
								//Beginn der Überprüfung ob nach unten ob Steine gesetzt werden können
								//Und in der Reihe ein Stein mit dem Status 0 kommt
								int gehenachlinksoben_links=j-2;
								for(int gehenachlinksoben=i-2;gehenachlinksoben>0;gehenachlinksoben--){
							
									if((gehenachlinksoben>=0)&&(gehenachlinksoben_links>=0)){
										if(SFeld[gehenachlinksoben][gehenachlinksoben_links].getState()==eigenerStein){
											SFeld[i][j].setBackground(Color.YELLOW);
											SFeld[i][j].setState(3);
											break;
										}
									}
							
									//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
									if((gehenachlinksoben>=0)&&(gehenachlinksoben_links>0)){
										if(SFeld[gehenachlinksoben][gehenachlinksoben_links].getState()==2){
											break;
										}
									}
									gehenachlinksoben_links--;
								}//Ende der for-Schleife
								//Ende der Überprüfung ob nach unten ob Steine gesetzt werden können
							
								//Wenn über dem leeren Feld ein Feld mit dem Status 1 ist
								}
							}
						}
					}
				}
						
	public void überprüfediagonallinksunten(int eigenerStein,int gegnerischerStein){
				for(int i=0;i<Höhe;i++){
						for(int j=0;j<Breite;j++){
						
				if(SFeld[i][j].getState()==2){
							if(i+1<Höhe&&j-1>0&&SFeld[i+1][j-1].getState()==gegnerischerStein){
							
								//Beginn der Überprüfung ob nach unten ob Steine gesetzt werden können
								//Und in der Reihe ein Stein mit dem Status 0 kommt
								int gehenachlinksunten_links=j-2;
								for(int gehenachlinksunten=i+2;gehenachlinksunten<Breite;gehenachlinksunten++){
							
									if((gehenachlinksunten<Höhe)&&(gehenachlinksunten_links>0)){
										if(SFeld[gehenachlinksunten][gehenachlinksunten_links].getState()==eigenerStein){
											SFeld[i][j].setBackground(Color.YELLOW);
											SFeld[i][j].setState(3);
											break;
										}
									}
									//Wenn ein leeres Feld nach dem gegnerischen Stein kommt muss abgebrochen werden
									if((gehenachlinksunten>=0)&&(gehenachlinksunten_links>0)){
										if(SFeld[gehenachlinksunten][gehenachlinksunten_links].getState()==2){
										break;
										}
									}
									gehenachlinksunten_links--;
								}//Ende der for-Schleife
								//Ende der Überprüfung ob nach unten ob Steine gesetzt werden können
							
								//Wenn über dem leeren Feld ein Feld mit dem Status 1 ist
								}
							}
						}
					}
						
		
		}

	
		public void setzeStein(int x,int y,int zähler){
			
			if(zähler%2==0){
				SFeld[x][y].setState(0);
			}
			else{
				SFeld[x][y].setState(1);
			}
		}
		
		public void hintergrundAufGrünSetzen(){
			for(int i=0;i<Höhe;i++){
				for(int j=0;j<Breite;j++){
					SFeld[i][j].setBackground(Color.GREEN);
				}
			}
		}
		
		public void alleLeerenFelderAuf2Setzen(){
			for(int i=0;i<Höhe;i++){
				for(int j=0;j<Breite;j++){
					if(SFeld[i][j].getState()==3){
						SFeld[i][j].setState(2);
					}
				}
			}
		
		}
		

		public void spielroutine(int x,int y){
			
			spielerdran.setText(zähler%2==0?"Spieler1 ist am Zug":"Spieler2 ist am Zug");
			zug.setText("Spielzug: "+(zähler+1));
			test.setText("Feld: "+x+", "+y);//FeldKoordinate);
			test2.setText("State: "+SFeld[x][y].getState());
			//Beim Wert 3 kann ein Stein gesetzt werden
			if(SFeld[x][y].getState()==3){
				setzeStein(x,y,zähler);
				dreheSteineUm(x,y);
				zähler++;
			}
			else{
			spielroutine(x,y);
			}
			
			hintergrundAufGrünSetzen();
			alleLeerenFelderAuf2Setzen();
			sucheNachSetzbarenFeldern();
		}
		
		public void dreheSteineUm(int x,int y){
			if(zähler%2==0){
				dreheSteineUmNachUnten(x,y,1,0);
				dreheSteineUmNachOben(x,y,1,0);
				dreheSteineUmNachRechts(x,y,1,0);
				dreheSteineUmNachLinks(x,y,1,0);
				dreheSteineUmNachLinksOben(x,y,1,0);
				dreheSteineUmNachLinksUnten(x,y,1,0);
				//dreheSteineUmNachRechtsOben(x,y,1,0);
				//dreheSteineUmNachRechtsUnten(x,y,1,0);
			}
			else{
				dreheSteineUmNachUnten(x,y,0,1);
				dreheSteineUmNachOben(x,y,0,1);
				dreheSteineUmNachRechts(x,y,0,1);
				dreheSteineUmNachLinks(x,y,0,1);
				dreheSteineUmNachLinksOben(x,y,0,1);
				dreheSteineUmNachLinksUnten(x,y,0,1);
				//dreheSteineUmNachRechtsOben(x,y,0,1);
				//dreheSteineUmNachRechtsUnten(x,y,0,1);
			}
		
		}
		
		public void dreheSteineUmNachUnten(int x,int y,int gegnerischerStein,int eigenerStein){
			for(int nachunten=x+1;nachunten<Höhe;nachunten++){
					if(SFeld[nachunten][y].getState()==gegnerischerStein){
						SFeld[nachunten][y].setState(eigenerStein);
					}
					else{
					break;
					}
					
					
								
			}
		}
		
		public void dreheSteineUmNachOben(int x,int y,int gegnerischerStein,int eigenerStein){
			for(int nachoben=x-1;nachoben>=0;nachoben--){
					if(SFeld[nachoben][y].getState()==gegnerischerStein){
						SFeld[nachoben][y].setState(eigenerStein);
					}
					else{break;}
								
			}	
		
		}
		public void dreheSteineUmNachRechts(int x,int y,int gegnerischerStein,int eigenerStein){
			for(int nachrechts=y+1;nachrechts<Breite;nachrechts++){
					if(SFeld[x][nachrechts].getState()==gegnerischerStein){
						SFeld[x][nachrechts].setState(eigenerStein);
					}
					else{
					 	break;
					}
							
			}	
		}
		public void dreheSteineUmNachLinks(int x,int y,int gegnerischerStein,int eigenerStein){
			for(int nachlinks=y-1;nachlinks>=0;nachlinks--){
					if(SFeld[x][nachlinks].getState()==gegnerischerStein){
						SFeld[x][nachlinks].setState(eigenerStein);
					}
					else{
						break;
					}
			}	
		
		}
		
		public void dreheSteineUmNachLinksOben(int x,int y,int gegnerischerStein,int eigenerStein){
			int xlo=x-1;
			for(int nachlinksoben=y-1;nachlinksoben>0;nachlinksoben--){
					if(xlo>=0&&SFeld[xlo][nachlinksoben].getState()==gegnerischerStein){
							SFeld[xlo][nachlinksoben].setState(eigenerStein);
							
						
						xlo--;
					}
					else{
						break;
					}
			}	
		
		}
		
		public void dreheSteineUmNachLinksUnten(int x,int y,int gegnerischerStein,int eigenerStein){
			int xlu=x+1;
			for(int nachlinksunten=y-1;nachlinksunten>0;nachlinksunten--){
					if((xlu<Höhe)&&(SFeld[xlu][nachlinksunten].getState()==gegnerischerStein)){
							SFeld[xlu][nachlinksunten].setState(eigenerStein);
							
						
						xlu++;
					}
					else{
						break;
					}
			}	
		
		}
		
		public void dreheSteineUmNachRechtsOben(int x,int y,int gegnerischerStein,int eigenerStein){
			int xro=x-1;
			for(int nachrechtsoben=y+1;nachrechtsoben<Breite;nachrechtsoben++){
					if((xro>=0)&&(SFeld[xro][nachrechtsoben].getState()==gegnerischerStein)){
							SFeld[xro][nachrechtsoben].setState(eigenerStein);
							
						
						xro--;
					}
					else{
						break;
					}
			}	
		
		}
		
		public void dreheSteineUmNachRechtsUnten(int x,int y,int gegnerischerStein,int eigenerStein){
			int xru=x+1;
			for(int nachrechtsunten=y+1;nachrechtsunten<Breite;nachrechtsunten++){
					if((xru<Höhe)&&(SFeld[xru][nachrechtsunten].getState()==gegnerischerStein)){
							SFeld[xru][nachrechtsunten].setState(eigenerStein);
							
						
						xru++;
					}
					else{
						break;
					}
			}	
		
		}
		
}
 
G

Guest

Gast
Vielleicht hier:
Code:
for(int gehenachlinks=j-2;gehenachlinks<Höhe;gehenachlinks--) {
oder hier:
Code:
for(int gehenachrechtsoben=i-2;gehenachrechtsoben<Breite;gehenachrechtsoben--) {
 

Bleiglanz

Gesperrter Benutzer
eine for-schleife wird wohl kaum einen Stack-Overflow auslösen?

Code:
         if(SFeld[x][y].getState()==3){
            setzeStein(x,y,zähler);
            dreheSteineUm(x,y);
            zähler++;
         }
         else{
         spielroutine(x,y);
         }
wenn das == 3 ist, dann wird ja x und y nicht verändert und es bleibt 3 und endet in einer Endlosschleife

Ansonsten ist der Code ein übles Gebräu, hast du dir schon mal überlegt, die "Spiellogik" von der "Anzeige" zu trennen...?
 

Gaston

Aktives Mitglied
Ja ich hab vor die Spiellogik von der Spieloberfläche aber erst wenn die Spiellogik läuft :roll:

Danke für eure antworten ich werde ihnen nachgehen


Gruß

Gaston
 

Gaston

Aktives Mitglied
Vielen Dank an Gast! das waren tatsächlich die zwei for-schleifen die eine StackOverflowerror ausgelöst haben. Bleiglanz deine Theorie hätte auch richtig sein können, jedoch tritt die Verbindung nur mit einem Mousklick auf was du nicht wissen konntest weil ich den code icht erläutert habe. Aber eine erhöheZähler() und eine liefereZählerWert() sind tatsächlich eleganter.

ALSO NOCHMAL VIELEN DANK AN ALLE


Gruß


Gaston
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben