# Tic Tac Toe - Brett auf Sieger überprüfen



## azom (13. Nov 2011)

Hallo Leute

Bin derzeit dabei, ein übliches TTT-Spiel zu programmieren, aber jetzt hab ich ein Problem.
Jedes mal, wenn ein Spieler O oder X setzt, soll das Programm überprüfen, ob jemand gewonnen hat.
In meiner derzeitigen Version wird das Spiel jedoch nicht dann beendet, wenns sein sollte.
Kann mir da jemand helfen?


```
public class Tic 
{

private static String[][] brett=new String[3][3];
	
	public static boolean checkEnd()
	{
	int zahler=0;
	
		for(int i=0; i<3; i++)
		{	
		if(brett[i][0].equals(brett[i][1])&&brett[i][0].equals(brett[i][2])&&!brett[i][0].equals(" "))
			{
			return true;
			}
		}
		
		for(int i=0; i<3; i++)
		{
		if(brett[0][i].equals(brett[1][i])&&brett[0][i].equals(brett[2][i])&&!brett[0][i].equals(" "))
			{
			return true;
			}
		}
		
		if(brett[0][0].equals(brett[1][1])&&brett[0][0].equals(brett[2][2]))
		{
		return true;
		}
		
		if(brett[2][0].equals(brett[1][1])&&brett[2][0].equals(brett[0][2]))
		
		for(int i=0; i<3; i++)
		{	
			for(int n=0; i<3; i++)
			{
				if(brett[i][n].equals("O")||brett[i][n].equals("X"))
				{
				zahler++;
				}
			}
		}
		
		if(zahler==9)
		{
		return true;
		}
	zahler=0;
	return false;
	}
	
}
```

Die Ein- und Ausgabe läuft in einer Do-while-Schleife, die dann abgebrochen werden sollte, wenn ein spieler gewonnen hat.

Danke schon mal im Vorraus!


----------



## SlaterB (14. Nov 2011)

beim if in Zeile 26-29 wäre es egal wenn alle " " sind? vorher prüfst du das

na jedenfalls ist das leicht zu prüfen, ohne Programm kann es sowieso niemand sonst testen,
was hast du dann für eine Spielsituation, z.B. dreimal X in der oberen Reihe?
dann schaue an, was die erste Schleife bei i==0 macht, was kommt beim ersten der drei Vergleiche raus, beim zweiten und beim dritten?
oder wird die Schleife gar nicht erreicht? mit System.out.println() oder Debugger kannst du jeden einzelnen Programmschriff, jeden if-Vergleich direkt prüfen
und vergleichen was das Programm macht gegenüber dem Planablauf

am Code sehe ich keinen Fehler


----------



## lipox (14. Nov 2011)

SlaterB hat Recht. Aber der Fehler aus Zeile 26 wiederholt sich auch noch in Zeile 31. 
Da fehlt außerdem noch das 
	
	
	
	





```
{ return true; }
```

Ansonsten müsste es zwar stimmen, aber ich würde Dir den Rat geben, hier kein String Array zu verwenden. Nimm doch einfach ein int Array:
0 für nicht gesetzt, 
1 für Spieler 1, 
2 für Spieler 2.

Das hätte hauptsächlich den Vorteil, dass der Code wesentlich überschaubarer wird, da Du Dir Vergleiche mit .equals sparst.


----------



## Landei (14. Nov 2011)

Kleiner Tipp: Statt [c]private static String[][] brett=new String[3][3];[/c] kannst du [c]private static char[][] brett=new char[3][3];[/c] verwenden. Der Vorteil ist, dass du dann mit [c]==[/c] (statt [c]equals[/c]) vergleichen kannst.


----------

