# 4 Gewinnt - Code wird ignoriert



## fliger5 (18. Dez 2013)

Hi,
arbeite zurzeit an einem 4 Gewinnt Spiel in Java, allerdings ist jetzt ein Problem aufgetreten bei dem irgendwie der Code nach einem bestimmten Abschnitt ignoriert wird.

Hier mal der Code:

```
public void actionPerformed(ActionEvent eingabe) {
		
		zaehler++;
		JButton gewählterButton = (JButton)eingabe.getSource();
		
		if(zaehler %2== 1) 
		 {gewählterButton.setBackground(Color.RED);}		
		 else 
		 {gewählterButton.setBackground(Color.YELLOW);}
			  
		
		
		//Runterrutschen
		
		for(int i=0;i<(BREITE*HOEHE)-1;i++)
		{
		//RED = 1
		if (button[i].getBackground()==Color.red && button[i+BREITE].getBackground()==Color.blue)
			{
			button[i].setBackground(Color.blue);
			button[i+BREITE].setBackground(Color.red);
			button[i].setEnabled(true);
			CheckArray[i] = 0;
			button[i+BREITE].setEnabled(false);
			CheckArray[i+BREITE] = 1;
			}
		else if (button[i].getBackground()==Color.red)
		{CheckArray[i] = 1;}
		
		//YELLOW = 2
		if (button[i].getBackground()==Color.yellow && button[i+BREITE].getBackground()==Color.blue)
		    {
		    button[i].setBackground(Color.blue);
		    button[i+BREITE].setBackground(Color.yellow);
		    button[i].setEnabled(true);
		    CheckArray[i] = 0;
		    button[i+BREITE].setEnabled(false);
		    CheckArray[i+BREITE] = 2;
		    }
		else if (button[i].getBackground()==Color.yellow)
		{CheckArray[i] = 2;}
		}
		
		
		//Ab hier wird ignoriert
		for (int i=1;i<(HOEHE*BREITE);i++)
		{
		System.out.print(CheckArray[i] + ", ");
		}
```

Hab die Stelle markiert ab der der Code ignoriert wird. Setz ich den kleinen Teil

```
for (int i=1;i<(HOEHE*BREITE);i++)
{
System.out.print(CheckArray[i] + ", ");
}
```
allerdings VOR das "Runterrutschen", dann klappt es. Leider gibts dann einen Logikfehler, deswegen muss der Code eben UNTER das "Runterrutschen".
Der kleine Teil ist übrigens nicht das einzige was ignoriert wird, sondern alles was danach kommt und noch zur "public void actionPerformed"-Klasse gehört.


----------



## eMmiE (18. Dez 2013)

Welchen Compiler benutzt du?


----------



## Tobse (18. Dez 2013)

Also zuerst einmal ist das keine Klasse sondern eine Methode.
Zweitens ist dein Code grausam eingerückt und bietet 0 Übersicht, mach das bitte mal so:


```
a;
b()
{
    d;
    for(;;)
    {
        e;
        f;
    }
}
else
{
    g;
}
```
Dann siehst du vllt auch besser, ob was mit deinen Variablen nicht stimmt (ob vllt [c]HOEHE[/c] oder [c]BREITE[/c] verändert wird.

[EDIT]
Vielleicht fliegt auch eine [c]ArrayIndexOutOfBoundsException[/c] bei [c]checkArray[i + BREITE][/c]?
[/EDIT]


----------



## fliger5 (18. Dez 2013)

Also als Compiler benutz ich Eclipse.

Und ja, sorry Methode* 

HOEHE und BREITE sind fest deklariert, die werden nirgends verändert.

Dass das Array gesprengt wird ist auch nicht möglich, da ansonsten die Bedingungen nicht mehr erfüllt sein würden. (Die Anzahl der Buttons entspricht der Grösse des Arrays)

In dem Moment wo das Array gesprengt werden müsste, wäre die Bedingung 
	
	
	
	





```
button[i+BREITE].getBackground()==Color.blue
```
 nicht mehr gültig.


----------



## Tobse (18. Dez 2013)

fliger5 hat gesagt.:


> In dem Moment wo das Array gesprengt werden müsste, wäre die Bedingung
> 
> 
> 
> ...


Ja, genau. Und dann fliegt entweder eine [c]ArrayIndexOutOfBoundsException[/c] oder eine [c]NullPointerException[/c]. Hast du 100% *getestet*, dass das nicht der fall ist?


----------



## fliger5 (18. Dez 2013)

Es gibt in der Tat eine "ArrayIndexOutOfBoundsException"-Fehlermeldung. Jetzt frag ich mich allerdings wieso


----------



## Tobse (18. Dez 2013)

Naja, wohl weil du dich irgendwo verrechnet hast. Gehs nochmal durch und überprüfe, ob deine Rechnungen korrekt sind. Wenn ja musst du wohl das Array größer machen...


----------



## fliger5 (19. Dez 2013)

Danke, hab's hinbekommen mit den Arrays


----------

