Methoden Frage: Array-Werte in anderer Methode ändern

johannes2308

Mitglied
Kann mir jemand helfen? Ich bin dabei ein TicTacToe zu programmieren, aber wenn ich das Feld als Array in der Methode board festlege kann ich dieses zwar in der main Methode aus, jedoch wenn ich dann eine Random Position festlegen will an der das board[randomposition] = 'o' gesetzt werden soll gibt das Programm mir zwar mit System.out.println eine random Ziffer an jedoch wird mir anschließend wieder ein leeres board also mit nur ' ' angezeigt und nichts ist 'o' gesetzt. Bin grad am verzweifeln.

Wäre cool wenn mir jemand helfen könnte!

Grüße

[CODE lang="java" title="Methoden Veränderungen"]import java.math.*;

public static char board[] = new char[9];

public static void board() // erstellt Tictactoe spielfeld
{
board[0] = ' ';
board[1] = ' ';
board[2] = ' ';
board[3] = ' ';
board[4] = ' ';
board[5] = ' ';
board[6] = ' ';
board[7] = ' ';
board[8] = ' ';

System.out.println("[" + board[0] +"][" + board[1] + "][" + board[2] + "]");
System.out.println("[" + board[3] +"][" + board[4] + "][" + board[5] + "]");
System.out.println("[" + board[6] +"][" + board[7] + "][" + board[8] + "]");
}

public static void main(String[] args)
{
int pos;
int count = 0;

board();

do
{
do
{

pos = (int)(Math.random()*10) % 9;
count++;
}while(board[pos] != ' ' && count < 1000); // zieht random zahl an der board = 'o' gesetzt werden soll

System.out.println("Spieler o wählt Position " + pos + "!");
board[pos] = 'o';

board(); // soll das board mit einer Stelle mit 'o' ausgeben

}while(board[0] == ' ' || board[1] == ' ' ... || board[8] == ' '); // soll solange machen, wie board hat freie ' '

}[/CODE]
}
 
In der Methode board() setzt du doch erst alle Felder auf ' '. Daher ist es leer.

Unterteile die Methode doch in zwei Methoden, denen Du dann sinnvolle Namen gibst, z.B. init() für das Initialisieren und print() für die Ausgabe.
 
Derzeit hast Du folgenden Code:
[CODE lang="java" title="Aktuelle Methode" highlight="3-11,13-15"]public static void board() // erstellt Tictactoe spielfeld
{
board[0] = ' ';
board[1] = ' ';
board[2] = ' ';
board[3] = ' ';
board[4] = ' ';
board[5] = ' ';
board[6] = ' ';
board[7] = ' ';
board[8] = ' ';

System.out.println("[" + board[0] +"][" + board[1] + "][" + board[2] + "]");
System.out.println("[" + board[3] +"][" + board[4] + "][" + board[5] + "]");
System.out.println("[" + board[6] +"][" + board[7] + "][" + board[8] + "]");
}[/CODE]

Der erste Part setzt alle Felder auf ' '.
Der zweite Part macht eine Ausgabe.

Somit ist klar: Ein Aufruf von board() wird immer ein leeres Feld ausgeben und danach ist das Feld leer.

Daher kann man das aufteilen:
Java:
public static void init()
{
    board[0] = ' ';
    board[1] = ' ';
    board[2] = ' ';
    board[3] = ' ';
    board[4] = ' ';
    board[5] = ' ';
    board[6] = ' ';
    board[7] = ' ';
    board[8] = ' ';
}

public static void print()
{
    System.out.println("[" + board[0] +"][" + board[1] + "][" + board[2] + "]");
    System.out.println("[" + board[3] +"][" + board[4] + "][" + board[5] + "]");
    System.out.println("[" + board[6] +"][" + board[7] + "][" + board[8] + "]");
}

Nun kannst Du init() aufrufen, wann immer du das Brett leer initialisiert haben willst.
Und zur Ausgabe rufst du print aus.
 
Derzeit hast Du folgenden Code:
[CODE lang="java" title="Aktuelle Methode" highlight="3-11,13-15"]public static void board() // erstellt Tictactoe spielfeld
{
board[0] = ' ';
board[1] = ' ';
board[2] = ' ';
board[3] = ' ';
board[4] = ' ';
board[5] = ' ';
board[6] = ' ';
board[7] = ' ';
board[8] = ' ';

System.out.println("[" + board[0] +"][" + board[1] + "][" + board[2] + "]");
System.out.println("[" + board[3] +"][" + board[4] + "][" + board[5] + "]");
System.out.println("[" + board[6] +"][" + board[7] + "][" + board[8] + "]");
}[/CODE]

Der erste Part setzt alle Felder auf ' '.
Der zweite Part macht eine Ausgabe.

Somit ist klar: Ein Aufruf von board() wird immer ein leeres Feld ausgeben und danach ist das Feld leer.

Daher kann man das aufteilen:
Java:
public static void init()
{
    board[0] = ' ';
    board[1] = ' ';
    board[2] = ' ';
    board[3] = ' ';
    board[4] = ' ';
    board[5] = ' ';
    board[6] = ' ';
    board[7] = ' ';
    board[8] = ' ';
}

public static void print()
{
    System.out.println("[" + board[0] +"][" + board[1] + "][" + board[2] + "]");
    System.out.println("[" + board[3] +"][" + board[4] + "][" + board[5] + "]");
    System.out.println("[" + board[6] +"][" + board[7] + "][" + board[8] + "]");
}

Nun kannst Du init() aufrufen, wann immer du das Brett leer initialisiert haben willst.
Und zur Ausgabe rufst du print aus.
Klasse! Jetzt hats funktioniert. Ich danke dir.
 

Zurück
Oben