Ich soll ein Tic-Tac-Toe Spiel programmieren. oder anders gesagt "x" und "o". 3 x 3 Felder sollen es sein.
Ich habe den Code geschrieben, aber kriege den Fehler "Exception in thread "main" java.lang.NullPointerException" bei dem Aufruf des Konstruktors der Klasse. Ich weiß leider nicht, wie ich den Fehler beseitigen kann.
Freue mich auf eure Hilfe
Hier die Mainmethode
und eine Klasse
Ich habe den Code geschrieben, aber kriege den Fehler "Exception in thread "main" java.lang.NullPointerException" bei dem Aufruf des Konstruktors der Klasse. Ich weiß leider nicht, wie ich den Fehler beseitigen kann.
Freue mich auf eure Hilfe
Hier die Mainmethode
Java:
import java.io.*;
public class Ttest {
public static void main(String[] args) throws IOException{
TTT x = new TTT();
TTT o = new TTT();
int reihe[] = new int [9];
int spalte[] = new int [9];
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 9; i++)
{
if (i % 2 == 0){
System.out.println("Spieler x: Bitte geben Sie die Reihenzahl ein: ");
reihe[i] = Integer.parseInt(buffer.readLine ());
System.out.println("Spieler x: Bitte geben Sie die Spaltenzahl ein: ");
spalte[i] = Integer.parseInt(buffer.readLine ());
x.x(reihe[i], spalte[i]);
}
else{
System.out.println("Spieler o: Bitte geben Sie die Reihenzahl ein: ");
reihe[i] = Integer.parseInt(buffer.readLine ());
System.out.println("Spieler o: Bitte geben Sie die Spaltenzahl ein: ");
spalte[i] = Integer.parseInt(buffer.readLine ());
o.o(reihe[i], spalte[i]);
}
TTT.print(); // Spielfeld ausgeben
System.out.println();
// Nachdem der erste Nutzer 3 mal eingegeben hat, muss ueberprueft werden
//ob jemand gewonnen hat
if ( i >= 4){
if (x.gewonnen('x'))
System.out.println("Spieler x hat gewonnen");
if (o.gewonnen('o'))
System.out.println("Spieler o hat gewonnen");
}
}
}
}
und eine Klasse
Java:
public class TTT {
private static char spielfeld [];
TTT (){ // Konstruktor, alle Felder leeren
for (int i = 0; i < 9; i++){
spielfeld[i] = ' ';
}
}
void x(int zeile, int spalte){
if ( 0 > zeile || zeile > 2 || 0 > spalte || spalte > 2
|| spielfeld[zeile*3 + spalte] != ' '){
System.out.println("Inhalt schon besetzt bzw. ungueltige Zeile oder Spalte");
System.exit(1);
// Wenn Zeile oder Spalte nicht zwischen 0 und 2 liegt
// oder deren Inhalt besetzt ist, programm beenden
}
else{
spielfeld[zeile*3 + spalte] = 'x';
}
}
void o(int zeile, int spalte){
if ( 0 > zeile || zeile > 2 || 0 > spalte || spalte > 2
|| spielfeld[zeile*3 + spalte] != ' '){
System.exit(1);
// Wenn Zeile oder Spalte nicht zwischen 0 und 2 liegt
// oder deren Inhalt besetzt ist, programm beenden
}
else{
spielfeld[zeile*3 + spalte] = 'o';
}
}
static void print(){
// Ausgabe des Spielfeldes
for (int i = 0; i < 3; i = i + 3){
for (int j = i; j < 3; j++){ //Schleife fuer Reihen
System.out.print(spielfeld[j]);
}
System.out.println();
}
}
boolean gewonnen(char spieler){
// Die 3 Reihen pruefen
for (int i = 0; i < 9; i = 3*i ){
if (spielfeld[i] == spielfeld[i+1] && spielfeld[i+1] == spielfeld[i+2]
&& spielfeld[i +2] == spieler)
return true;
}
// Die 3 Spalten + die 2 Diagonale pruefen
for (int i = 0; i < 3; i++ ){
if (spielfeld[i] == spielfeld[i+3] && spielfeld[i+3] == spielfeld[i+6]
&& spielfeld[i +6] == spieler)
return true;
if (i == 0)
{
if (spielfeld[i] == spielfeld[i + 4] && spielfeld[ i + 4] == spielfeld[i + 8]
&& spielfeld[i + 8] == spieler)
return true;
}
if (i == 2)
{
if (spielfeld[i] == spielfeld[i + 2] && spielfeld[ i + 2] == spielfeld[i + 4]
&& spielfeld[i + 4] == spieler)
return true;
}
}
return false;
}
}