Fehler beim Programmieren von TicTacToe

Kleeraphie

Mitglied
Hallo,
ich habe Probleme beim Programmieren des Computergegners bei meinem TicTacToe-Spiel. Mein Problem ist, das der Computer immer das letzte Feld besetzten möchte, dabei aber auch alle anderen Felder vor diesem Feld besetzt.
Hier meine Klasse für den Computer:
Java:
import java.util.ArrayList;
import java.util.HashMap;

public class Computer {

    private static String[][] tempField = new String[3][3];
    private static String[][] tempField2 = new String[3][3];
    private static HashMap<Integer, String> options = new HashMap<>(); // K: option V: field
    private static int winWithOneMove = 9;
    private static int winWithTwoMoves = 8;
    private static int winWithThreeMoves = 7;
    private static int winWithFourMoves = 6;
    private static int winWithFiveMoves = 5;
    private static int winWithSixMoves = 4;
    private static int winWithSevenMoves = 3;
    private static int winWithEightMoves = 2;
    private static int winWithNineMoves = 1;
    private static int tie = 0;
    private static int looseWithOneMove = -9;
    private static int looseWithTwoMoves = -8;
    private static int looseWithThreeMoves = -7;
    private static int looseWithFourMoves = -6;
    private static int looseWithFiveMoves = -5;
    private static int looseWithSixMoves = -4;
    private static int looseWithSevenMoves = -3;
    private static int looseWithEightMoves = -2;
    private static int looseWithNineMoves = -1;

    public static void evaluateMove() {

        tempField = Field.getFields();

        // Möglichkeiten mit nur einem Zug überprüfen
        Player.setPlayer("O");
       
        for (int y = 0; y <= 2; y++) {
            for (int x = 0; x <= 2; x++) {
                if (tempField[y][x].equals("" + new Integer(3 * y + x + 1))) {
                    tempField[y][x] = Player.getPlayer();
                   
                    if (checkingWinO())
                        options.put(winWithOneMove, "" + new Integer(3 * y + x + 1));
                    else if (checkingTie())
                        options.put(tie, "" + new Integer(3 * y + x +1));
               
                tempField = Field.getFields();
                }
            }
        }

        Player.setPlayer("X");
       
        for (int y = 0; y <= 2; y++) {
            for (int x = 0; x <= 2; x++) {
                if (tempField[y][x].equals("" + new Integer(3 * y + x + 1))) {
                    tempField[y][x] = Player.getPlayer();
                   
                    if (checkingWinO())
                        options.put(looseWithOneMove, "" + new Integer(3 * y + x + 1));
                    else if (checkingTie())
                        options.put(tie, "" + new Integer(3 * y + x +1));
               
                tempField = Field.getFields();
                }
            }
        }

        // Möglichkeiten für mehrere Züge überprüfen
        Player.changePlayer();

        ArrayList<String> usedFirstMoves = new ArrayList<>();
        ArrayList<String> usedSecondMoves = new ArrayList<>();
        ArrayList<String> usedThirdMoves = new ArrayList<>();
        ArrayList<String> usedFourthMoves = new ArrayList<>();
        ArrayList<String> usedFifthMoves = new ArrayList<>();
        ArrayList<String> usedSixthMoves = new ArrayList<>();
        ArrayList<String> usedSeventhMoves = new ArrayList<>();
        ArrayList<String> usedEightMoves = new ArrayList<>();
        ArrayList<String> usedNinthMoves = new ArrayList<>();

        for (int i = 0; i < 9; i++) {

            for (int y = 0; y <= 2; y++) {
                for (int x = 0; x <= 2; x++) {

                    if (!tempField[y][x].equals("" + (3 * y + x + 1))) {
                        usedFirstMoves.add("" + (3 * y + x + 1));
                        usedSecondMoves.add("" + (3 * y + x + 1));
                        usedThirdMoves.add("" + (3 * y + x + 1));
                        usedFourthMoves.add("" + (3 * y + x + 1));
                        usedFifthMoves.add("" + (3 * y + x + 1));
                        usedSixthMoves.add("" + (3 * y + x + 1));
                        usedSeventhMoves.add("" + (3 * y + x + 1));
                        usedEightMoves.add("" + (3 * y + x + 1));
                        usedNinthMoves.add("" + (3 * y + x + 1));
                    }

                }
            }

            Player.changePlayer();

            for (int y = 0; y <= 2; y++) {
                for (int x = 0; x <= 2; x++) {

                    if (!usedFirstMoves.contains("" + (3 * y + x + 1))) {

                        usedFirstMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        Player.changePlayer();

                    } else if (!usedSecondMoves.contains("" + (3 * y + x + 1))) {

                        usedSecondMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithTwoMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithTwoMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    } else if (!usedThirdMoves.contains("" + (3 * y + x + 1))) {

                        usedThirdMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithThreeMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithThreeMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    } else if (!usedFourthMoves.contains("" + (3 * y + x + 1))) {

                        usedFourthMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithFourMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithFourMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    } else if (!usedFifthMoves.contains("" + (3 * y + x + 1))) {

                        usedFifthMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithFiveMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithFiveMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    } else if (!usedSixthMoves.contains("" + (3 * y + x + 1))) {

                        usedSixthMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithSixMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithSixMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    } else if (!usedSeventhMoves.contains("" + (3 * y + x + 1))) {

                        usedSeventhMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithSevenMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithSevenMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    } else if (!usedEightMoves.contains("" + (3 * y + x + 1))) {

                        usedEightMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithEightMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithEightMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    } else if (!usedNinthMoves.contains("" + (3 * y + x + 1))) {

                        usedNinthMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithNineMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithNineMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    }

                }
            }
        }

        Player.setPlayer("O");
        tempField2 = Field.getFields();

        for (int i = 0; i < 9; i++) {

            for (int y = 0; y <= 2; y++) {
                for (int x = 0; x <= 2; x++) {

                    if (!usedFirstMoves.contains("" + (3 * y + x + 1))) {

                        usedFirstMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        Player.changePlayer();

                    } else if (!usedSecondMoves.contains("" + (3 * y + x + 1))) {

                        usedSecondMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithTwoMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithTwoMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    } else if (!usedThirdMoves.contains("" + (3 * y + x + 1))) {

                        usedThirdMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithThreeMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithThreeMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    } else if (!usedFourthMoves.contains("" + (3 * y + x + 1))) {

                        usedFourthMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithFourMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithFourMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    } else if (!usedFifthMoves.contains("" + (3 * y + x + 1))) {

                        usedFifthMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithFiveMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithFiveMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    } else if (!usedSixthMoves.contains("" + (3 * y + x + 1))) {

                        usedSixthMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithSixMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithSixMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    } else if (!usedSeventhMoves.contains("" + (3 * y + x + 1))) {

                        usedSeventhMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithSevenMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithSevenMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    } else if (!usedEightMoves.contains("" + (3 * y + x + 1))) {

                        usedEightMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithEightMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithEightMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    } else if (!usedNinthMoves.contains("" + (3 * y + x + 1))) {

                        usedNinthMoves.add("" + (3 * y + x + 1));
                        tempField2[y][x] = Player.getPlayer();

                        if (checkingWinX())
                            options.put(looseWithNineMoves, "" + (3 * y + x + 1));
                        else if (checkingWinO())
                            options.put(winWithNineMoves, "" + (3 * y + x + 1));
                        else if (checkingTie())
                            options.put(tie, "" + (3 * y + x + 1));

                        Player.changePlayer();

                    }

                }
            }
        }

        setMove();

    }

    private static void setMove() {
       
        System.out.println("t");

        Player.setPlayer("O");

        if (options.containsKey(winWithOneMove)) {
            Field.Fields[Field.getYOfField(options.get(winWithOneMove))][Field
                    .getXOfField(options.get(winWithOneMove))] = Player.getPlayer();
        } else if (options.containsKey(winWithTwoMoves)) {
            Field.Fields[Field.getYOfField(options.get(winWithTwoMoves))][Field
                    .getXOfField(options.get(winWithTwoMoves))] = Player.getPlayer();
        } else if (options.containsKey(winWithThreeMoves)) {
            Field.Fields[Field.getYOfField(options.get(winWithThreeMoves))][Field
                    .getXOfField(options.get(winWithThreeMoves))] = Player.getPlayer();
        } else if (options.containsKey(winWithFourMoves)) {
            Field.Fields[Field.getYOfField(options.get(winWithFourMoves))][Field
                    .getXOfField(options.get(winWithFourMoves))] = Player.getPlayer();
        } else if (options.containsKey(winWithFiveMoves)) {
            Field.Fields[Field.getYOfField(options.get(winWithFiveMoves))][Field
                    .getXOfField(options.get(winWithFiveMoves))] = Player.getPlayer();
        } else if (options.containsKey(winWithSixMoves)) {
            Field.Fields[Field.getYOfField(options.get(winWithSixMoves))][Field
                    .getXOfField(options.get(winWithSixMoves))] = Player.getPlayer();
        } else if (options.containsKey(winWithSevenMoves)) {
            Field.Fields[Field.getYOfField(options.get(winWithSevenMoves))][Field
                    .getXOfField(options.get(winWithSevenMoves))] = Player.getPlayer();
        } else if (options.containsKey(winWithEightMoves)) {
            Field.Fields[Field.getYOfField(options.get(winWithEightMoves))][Field
                    .getXOfField(options.get(winWithEightMoves))] = Player.getPlayer();
        } else if (options.containsKey(winWithNineMoves)) {
            Field.Fields[Field.getYOfField(options.get(winWithNineMoves))][Field
                    .getXOfField(options.get(winWithNineMoves))] = Player.getPlayer();
        } else if (options.containsKey(looseWithOneMove)) {
            Field.Fields[Field.getYOfField(options.get(looseWithOneMove))][Field
                    .getXOfField(options.get(looseWithOneMove))] = Player.getPlayer();
        } else if (options.containsKey(looseWithTwoMoves)) {
            Field.Fields[Field.getYOfField(options.get(looseWithTwoMoves))][Field
                    .getXOfField(options.get(looseWithTwoMoves))] = Player.getPlayer();
        } else if (options.containsKey(looseWithThreeMoves)) {
            Field.Fields[Field.getYOfField(options.get(looseWithThreeMoves))][Field
                    .getXOfField(options.get(looseWithThreeMoves))] = Player.getPlayer();
        } else if (options.containsKey(looseWithFourMoves)) {
            Field.Fields[Field.getYOfField(options.get(looseWithFourMoves))][Field
                    .getXOfField(options.get(looseWithFourMoves))] = Player.getPlayer();
        } else if (options.containsKey(looseWithFiveMoves)) {
            Field.Fields[Field.getYOfField(options.get(looseWithFiveMoves))][Field
                    .getXOfField(options.get(looseWithFiveMoves))] = Player.getPlayer();
        } else if (options.containsKey(looseWithSixMoves)) {
            Field.Fields[Field.getYOfField(options.get(looseWithSixMoves))][Field
                    .getXOfField(options.get(looseWithSixMoves))] = Player.getPlayer();
        } else if (options.containsKey(looseWithSevenMoves)) {
            Field.Fields[Field.getYOfField(options.get(looseWithSevenMoves))][Field
                    .getXOfField(options.get(looseWithSevenMoves))] = Player.getPlayer();
        } else if (options.containsKey(looseWithEightMoves)) {
            Field.Fields[Field.getYOfField(options.get(looseWithEightMoves))][Field
                    .getXOfField(options.get(looseWithEightMoves))] = Player.getPlayer();
        } else if (options.containsKey(looseWithNineMoves)) {
            Field.Fields[Field.getYOfField(options.get(looseWithNineMoves))][Field
                    .getXOfField(options.get(looseWithNineMoves))] = Player.getPlayer();
        }

        else if (options.containsKey(tie)) {
            Field.Fields[Field.getYOfField(options.get(tie))][Field.getXOfField(options.get(tie))] = Player.getPlayer();
        }

        else {
           
            //erstes freies Feld belegen
            for (int y = 0; y <= 2; y++) {
                for (int x = 0; x<= 2; x++) {
                    if (Field.Fields[y][x].equals("" + (new Integer(3 * y + x + 1))))
                        Field.Fields[y][x] = Player.getPlayer();
                }
            }
        }

    }

    private static boolean checkingWinX() {

        // waagerecht
        if ((tempField[0][0].equals("X")) && (tempField[0][1].equals("X")) && (tempField[0][2].equals("X")))
            return true;
        else if ((tempField[1][0].equals("X")) && (tempField[1][1].equals("X")) && (tempField[1][2].equals("X")))
            return true;
        else if ((tempField[2][0].equals("X")) && (tempField[2][1].equals("X")) && (tempField[2][2].equals("X")))
            return true;

        // senkrecht
        else if ((tempField[0][0].equals("X")) && (tempField[1][0].equals("X")) && (tempField[2][0].equals("X")))
            return true;
        else if ((tempField[0][1].equals("X")) && (tempField[1][1].equals("X")) && (tempField[2][1].equals("X")))
            return true;
        else if ((tempField[0][2].equals("X")) && (tempField[1][2].equals("X")) && (tempField[2][2].equals("X")))
            return true;

        // diagonal
        else if ((tempField[0][0].equals("X")) && (tempField[1][1].equals("X")) && (tempField[2][2].equals("X")))
            return true;
        else if ((tempField[0][2].equals("X")) && (tempField[1][1].equals("X")) && (tempField[2][0].equals("X")))
            return true;
        else
            return false;

    }

    private static boolean checkingWinO() {
        //waagerecht
        if ((tempField[0][0].equals("O")) && (tempField[0][1].equals("O")) && (tempField[0][2].equals("O")))
            return true;
        else if ((tempField[1][0].equals("O")) && (tempField[1][1].equals("O")) && (tempField[1][2].equals("O")))
            return true;
        else if ((tempField[2][0].equals("O")) && (tempField[2][1].equals("O")) && (tempField[2][2].equals("O")))
            return true;

        // senkrecht
        else if ((tempField[0][0].equals("O")) && (tempField[1][0].equals("O")) && (tempField[2][0].equals("O")))
            return true;
        else if ((tempField[0][1].equals("O")) && (tempField[1][1].equals("O")) && (tempField[2][1].equals("O")))
            return true;
        else if ((tempField[0][2].equals("O")) && (tempField[1][2].equals("O")) && (tempField[2][2].equals("O")))
            return true;

        // diagonal
        else if ((tempField[0][0].equals("O")) && (tempField[1][1].equals("O")) && (tempField[2][2].equals("O")))
            return true;
        else if ((tempField[0][2].equals("O")) && (tempField[1][1].equals("O")) && (tempField[2][0].equals("O")))
            return true;
        else
            return false;

    }

    private static boolean checkingTie() {

        if (!checkingWinX() && !checkingWinO() && !Field.playable())
            return true;
        else
            return false;
    }

}
 

VfL_Freak

Top Contributor
Moin,

könntest Du bitte wenigstens mal eine konkretere Problembeschreibung liefern und auch schreiben, WO in Deinem Code das ist??
Es wird sich wohl kaum einer durch hunderte Zeilen unkommentierten Codes wühlen !!

VG Klaus
 

Kleeraphie

Mitglied
Hallo,
das Problem ist, dass wenn ich den ersten Zug gemacht habe, der Computer, nachdem er in der Methode in der Methode "evaluateMove" einige Züge bis zum Ende durchgespielt und den jeweils letzten Zug mit einem bestimmten Wert in der HashMap "options" gespeichert hat, er in der Methode "setMove" das Feld besetzen soll, mit dem er am schnellsten gewinnt oder falls es keinen solchen Zug gibt, er das Feld besetzen soll, mit dem der Gegner als erstes gewinnen kann. Dabei nimmt er aber immer das letzte verfügbare Feld, was aber nicht mein Hauptproblem ist, und besetzt dadurch das Feld und alle anderen Felder die vor diesem Feld kommen auch noch, was dazu führt, dass er das ganze Spielfeld mit nur einem Zug vollmacht und das Spiel damit zu Ende ist.
 

mihe7

Top Contributor
Mal ins Blaue geraten (ich hab den Code nur kurz überflogen): vermutlich liefert Fields.getFields() immer das selbe Array zurück - Du bräuchtest aber eine Kopie davon.
 

Kleeraphie

Mitglied
vermutlich liefert Fields.getFields() immer das selbe Array zurück - Du bräuchtest aber eine Kopie davon.
In der Methode "evaluateMove" benutze ich immer das Array "tempField" oder "tempField2", welche eine Kopie von dem Array des Original-Spielfelds sind, welches mir Field.getFields() zurückgibt. In der Methode "setMove" wird durch die "else-if"-Abfragen nur ein Feld besetzt.
 

Kleeraphie

Mitglied
Hallo,
hier ist die ganze Klasse "Field":
Code:
import java.util.Scanner;

import Main.Main;

public class Field {

    public static String[][] Fields = new String[3][3];
    private static Scanner s = new Scanner(System.in);
    private static String eingabe;
    private static int e;

    static String linie = "-------------------";
    static String leereLinie = "|     |     |     |";
    static String linemitObjekt1 = "|  " + Fields[0][0] + "  |  " + Fields[0][1] + "  |  " + Fields[0][2] + "  |";
    static String linemitObjekt2 = "|  " + Fields[1][0] + "  |  " + Fields[1][1] + "  |  " + Fields[1][2] + "  |";
    static String linemitObjekt3 = "|  " + Fields[2][0] + "  |  " + Fields[2][1] + "  |  " + Fields[2][2] + "  |";

    public static void init() {

        Fields[0][0] = "1";
        Fields[0][1] = "2";
        Fields[0][2] = "3";
        Fields[1][0] = "4";
        Fields[1][1] = "5";
        Fields[1][2] = "6";
        Fields[2][0] = "7";
        Fields[2][1] = "8";
        Fields[2][2] = "9";

    }

    public static void printField() {

        System.out.println("Spieler " + Player.getPlayer() + " ist am Zug.");
        System.out.println();
        System.out.println(linie);
        System.out.println(leereLinie);
        System.out.println(linemitObjekt1);
        System.out.println(leereLinie);
        System.out.println(linie);
        System.out.println(leereLinie);
        System.out.println(linemitObjekt2);
        System.out.println(leereLinie);
        System.out.println(linie);
        System.out.println(leereLinie);
        System.out.println(linemitObjekt3);
        System.out.println(leereLinie);
        System.out.println(linie);
        System.out.println();
        System.out.print("Eingabe: ");

        eingabe = s.nextLine();

    }

    public static void clearConsole() {

        for (int i = 0; i < 50; i++) {
            System.out.println();
        }

    }

    private static void setSymbol() {

        try {
            e = Integer.parseInt(eingabe);
        } catch (NumberFormatException e1) {
            System.out.println("Ungültige Eingabe");
            s.nextLine();
            clearConsole();
            printField();
        }

        switch (e) {
        case 1:
            if (Fields[0][0].equals("1"))
                Fields[0][0] = Player.getPlayer();
            else {
                System.out.println("Feld 1 ist bereits besetzt.");
                s.nextLine();
                clearConsole();
                printField();
            }

            break;

        case 2:
            if (Fields[0][1].equals("2"))
                Fields[0][1] = Player.getPlayer();
            else {
                System.out.println("Feld 2 ist bereits besetzt.");
                s.nextLine();
                clearConsole();
                printField();
            }

            break;

        case 3:
            if (Fields[0][2].equals("3"))
                Fields[0][2] = Player.getPlayer();
            else {
                System.out.println("Feld 3 ist bereits besetzt.");
                s.nextLine();
                clearConsole();
                printField();
            }

            break;

        case 4:
            if (Fields[1][0].equals("4"))
                Fields[1][0] = Player.getPlayer();
            else {
                System.out.println("Feld 4 ist bereits besetzt.");
                s.nextLine();
                clearConsole();
                printField();
            }

            break;

        case 5:
            if (Fields[1][1].equals("5"))
                Fields[1][1] = Player.getPlayer();
            else {
                System.out.println("Feld 5 ist bereits besetzt.");
                s.nextLine();
                clearConsole();
                printField();
            }

            break;

        case 6:
            if (Fields[1][2].equals("6"))
                Fields[1][2] = Player.getPlayer();
            else {
                System.out.println("Feld 6 ist bereits besetzt.");
                s.nextLine();
                clearConsole();
                printField();
            }

            break;

        case 7:
            if (Fields[2][0].equals("7"))
                Fields[2][0] = Player.getPlayer();
            else {
                System.out.println("Feld 7 ist bereits besetzt.");
                s.nextLine();
                clearConsole();
                printField();
            }

            break;

        case 8:
            if (Fields[2][1].equals("8"))
                Fields[2][1] = Player.getPlayer();
            else {
                System.out.println("Feld 8 ist bereits besetzt.");
                s.nextLine();
                clearConsole();
                printField();
            }

            break;

        case 9:
            if (Fields[2][2].equals("9"))
                Fields[2][2] = Player.getPlayer();
            else {
                System.out.println("Feld 9 ist bereits besetzt.");
                s.nextLine();
                clearConsole();
                printField();
            }

            break;

        default:
            System.out.println("Ungültige Eingabe!");
            s.nextLine();
            clearConsole();
            printField();
            break;
        }

    }

    public static void playSolo() {

        init();

        do {

            linemitObjekt1 = "|  " + Fields[0][0] + "  |  " + Fields[0][1] + "  |  " + Fields[0][2] + "  |";
            linemitObjekt2 = "|  " + Fields[1][0] + "  |  " + Fields[1][1] + "  |  " + Fields[1][2] + "  |";
            linemitObjekt3 = "|  " + Fields[2][0] + "  |  " + Fields[2][1] + "  |  " + Fields[2][2] + "  |";

            if (Player.getPlayer().equals("X")) {
                clearConsole();

                printField();

                setSymbol();
                Player.changePlayer();
            } else {
                Computer.evaluateMove();
                Computer.setAMove = false;
                Player.setPlayer("X");
            }

            if (Winning.checkingWinX()) {
                clearConsole();
                printFinishedField();
                System.out.println("Spieler X hat gewonnen!");
                System.out.println("Enter drücken um neues Spiel zu spielen");
                s.nextLine();
                clearConsole();
                Main.main(null);
                break;
            } else if (Winning.checkingWinO()) {
                clearConsole();
                printFinishedField();
                System.out.println("Spieler O hat gewonnen!");
                System.out.println("Enter drücken um neues Spiel zu spielen");
                s.nextLine();
                clearConsole();
                Main.main(null);
                break;
            } else if (Winning.checkingTie()) {
                clearConsole();
                printFinishedField();
                System.out.println("Unentschieden!");
                System.out.println("Enter drücken um neues Spiel zu spielen");
                s.nextLine();
                clearConsole();
                Main.main(null);
                break;
            }

        }

        while (playable());
    }

    public static void playDuo() {

        init();

        do {

            linemitObjekt1 = "|  " + Fields[0][0] + "  |  " + Fields[0][1] + "  |  " + Fields[0][2] + "  |";
            linemitObjekt2 = "|  " + Fields[1][0] + "  |  " + Fields[1][1] + "  |  " + Fields[1][2] + "  |";
            linemitObjekt3 = "|  " + Fields[2][0] + "  |  " + Fields[2][1] + "  |  " + Fields[2][2] + "  |";

            clearConsole();

            printField();

            setSymbol();
            Player.changePlayer();

            if (Winning.checkingWinX()) {
                clearConsole();
                printFinishedField();
                System.out.println("Spieler X hat gewonnen!");
                break;
            } else if (Winning.checkingWinO()) {
                clearConsole();
                printFinishedField();
                System.out.println("Spieler O hat gewonnen!");
                s.nextLine();
                break;
            } else if (Winning.checkingTie()) {
                clearConsole();
                printFinishedField();
                System.out.println("Unentschieden!");
                s.nextLine();
                break;
            }

        } while (playable());

    }

    public static boolean playable() {
        // diese for-Schleifen gehen jedes Feld durch
        for (int x = 0; x <= 2; x++) {
            for (int y = 0; y <= 2; y++) {
                if (Fields[x][y].equals("" + (3 * y + x + 1)))
                    return true; // wird zurückgegeben, wenn mindestens ein Feld noch leer ist
            }
        }
        return false; // wird zurückgegeben, wenn kein Feld mehr leer ist
    }

    public static void printFinishedField() {

        linemitObjekt1 = "|  " + Fields[0][0] + "  |  " + Fields[0][1] + "  |  " + Fields[0][2] + "  |";
        linemitObjekt2 = "|  " + Fields[1][0] + "  |  " + Fields[1][1] + "  |  " + Fields[1][2] + "  |";
        linemitObjekt3 = "|  " + Fields[2][0] + "  |  " + Fields[2][1] + "  |  " + Fields[2][2] + "  |";

        System.out.println(linie);
        System.out.println(leereLinie);
        System.out.println(linemitObjekt1);
        System.out.println(leereLinie);
        System.out.println(linie);
        System.out.println(leereLinie);
        System.out.println(linemitObjekt2);
        System.out.println(leereLinie);
        System.out.println(linie);
        System.out.println(leereLinie);
        System.out.println(linemitObjekt3);
        System.out.println(leereLinie);
        System.out.println(linie);
        System.out.println();
    }

    public static String[][] getFields() {
        return Fields;
    }

    public static int getXOfField(String field) {

        switch (field) {
        case "1":
            return 0;
        case "2":
            return 1;
        case "3":
            return 2;
        case "4":
            return 0;
        case "5":
            return 1;
        case "6":
            return 2;
        case "7":
            return 0;
        case "8":
            return 1;
        case "9":
            return 2;
        default:
            return 0;
        }

    }

    public static int getYOfField(String field) {
        switch (field) {
        case "1":
            return 0;
        case "2":
            return 0;
        case "3":
            return 0;
        case "4":
            return 1;
        case "5":
            return 1;
        case "6":
            return 1;
        case "7":
            return 2;
        case "8":
            return 2;
        case "9":
            return 2;
        default:
            return 0;
        }
    }
       

}
 

mihe7

Top Contributor
Ja, Du gibst nur eine Referenz auf das Array zurück.

In der Methode "evaluateMove" benutze ich immer das Array "tempField" oder "tempField2", welche eine Kopie von dem Array des Original-Spielfelds sind,

Nein, tempField und tempField2 sind Variablen, die eine Referenz auf ein Array halten. Wenn Du z. B. tempField = tempField2 schreibst, werden nicht die Daten kopiert, sondern tempField und tempField2 bezeichnen dann beide das selbe Array.
 

Kleeraphie

Mitglied
Nein, tempField und tempField2 sind Variablen, die eine Referenz auf ein Array halten. Wenn Du z. B. tempField = tempField2 schreibst, werden nicht die Daten kopiert, sondern tempField und tempField2 bezeichnen dann beide das selbe Array.
Danke, ich habe das Problem jetzt so gelöst:
Java:
public static String[][] getFields() {
       
        String[][] field = new String[3][3];
       
        for (int i = 0; i < Fields.length; i++) {
            for (int j = 0; j < Fields[i].length; j++) {
                field[i][j] = Fields[i][j];
            }
        }
       
        return field;
    }
Jetzt habe ich nur noch das Problem, dass der Computer immer das letzte Feld besetzt, d.h. wenn ich nicht bei meinem ersten Zug das letzte Feld nehme, besetzt der Computer dieses Feld und will es die nächsten Züge wieder besetzen und nimmt keine anderen Felder die noch frei sind. Wenn ich aber in meinem ersten Zug das letzte Feld besetze, dann nimmt er das Feld vor meinem. Kannst du mir dabei auch noch helfen?
 

mihe7

Top Contributor
Jetzt habe ich nur noch das Problem
Nein, der ganze Code ist ein einziges Problem. Das ist nicht böse gemeint.

Normalerweise würde ich sagen, fang damit an, die static-Geschichten zu entfernen. In dem Fall sieht man den Wald vor lauter Bäumen nicht mehr: fang damit an, Deinen Code besser strukturieren, mehr lokale Variablen einzusetzen und vor allem mehr auf DRY zu achten - und dann schmeiß den ganzen static-Müll raus.

Kannst du mir dabei auch noch helfen?
Nicht wirklich. Ich verstehe schon nicht, was Du in der 428 Zeilen langen evaluateMove-Methode machen willst...
 

MoxxiManagarm

Top Contributor
Ich muss mich leider mihe kommentarlos anschließen. Ich habe versucht alleine nur deine Field Klasse zu überlicken, aber das ist ein Ding der Unmöglichkeit. Überall hast du duplizierten Code und unendliche if-else / switch-case Konstrukte, von dem ganzen static mal abgesehen.

Nur um ein Beispiel zu nennen:
Die getX/Y Funktionen lassen sich einfach mit Ganzzahldivision und Modulo abbilden.

Java:
    public int getXOfField(int intField) {
        return (intField - 1) / 3; // Ganzzahldivision
    }

    public int getYOfField(int intField) {
        return (intField - 1) % 3; // Modulo - Rest
    }

Versuche deinen Code zu generalisieren und strikter zu trennen. z.B.
- Wenn du ein Symbol auf ein Feld setzt ist es doch egal ob es Feld 1 2 3 oder 9 ist. Das Verhalten ist überall gleich, also ist es auch nur ein Code, aber mit verändertem Index.
- Ob du gegen Computer oder Mensch spielst, ist grundsätzlich auch egal. Mach dir eine Methode getPlayerChoice() und eine getAIChoice(). getPlayerChoice() kannst du sowohl für Spieler 1 und 2 einsetzen und je nach Modus für Spielere 2 eben getAIChoice() anwenden.
- Field sollte nichts mit Player zu tun haben. Stattdessen sagst du Field einfach nur z.B. field.tryToSetPlayerSymbolAt('x', 9) und du erhälst ein boolean
- Ich würde auch Field keine printMethode geben - nicht eine. Field sollte nur Spiellogik ("Model") enthalten, überlasse das printen deines Feldes deiner Spielklasse (i/o "Controller"/"View")

Jeder von uns hat sicherlich mal TicTactoe programmiert und der Code geht selbst mit AI Logik kaum über eine vielleicht zwei A4 Seite(n) hinaus. Das muss dein Ziel sein und alles was diesen Rahmen sprengt musst du versuchen besser zu machen bevor du fortfährst und dich so verrennst. du machst es dir nur umständlich und dein Leben schwer.
 

mihe7

Top Contributor
Ich muss mich leider mihe kommentarlos anschließen.
Was heißt da "leider"? Das ist ja eine bodenlose Unverschämtheit ;)

@Kleeraphie mal ein Beispiel:

Java:
public class Field {
    private final int[] fields = new int[9];
    private int player = 1;
    private int winner;
    public int player() { return player; }
    public int winner() { return winner; }
    public boolean gameOver() { return winner != 0 || tie(); }
    public boolean tie() {
        if (winner != 0) { return false; }
        boolean tie = true;
        for (int field : fields) {
            tie &= field != 0;
        }
        return tie;
    }
    public int get(int field) { return fields[field]; }
    public boolean tryMove(int field) {
        boolean validMove = (fields[field] | winner) == 0;
        if (validMove) {
            fields[field] = player;
            winner = determineWinner();
            player = player % 2 + 1;
        }
        return validMove;
    }
    private int determineWinner() {
        int[] checks = {0,4,8,2,4,6,0,3,6,1,4,7,2,5,8,0,1,2,3,4,5,6,7,8};
        for (int i = 0; i < checks.length;i+=3) {
            if ((fields[checks[i]] & fields[checks[i+1]] & fields[checks[i+2]]) != 0) {
                return fields[checks[i]];
            }
        }
        return 0;
    }
}
Mit Lambdas/Streams geht das problemlos noch kürzer.
 

MoxxiManagarm

Top Contributor
Hier mal eine grobe Struktur, wie es aussehen könnte. Die wichtigste Logik habe ich offen gelassen. Wie du siehst ist hier kein Anzeichen von vielen if oder switch-cases. Die einzige Klasse mit Ausgabe ist TicTacToe selbst. Du kannst die Spieler beliebig setzen, wenn du willst auch AI gegen AI.

Java:
package javaforum.org.tictactoe;

import java.util.Arrays;
import java.util.Random;


public class TicTacToe {
    private final Field field;
 
    private final Opponent player1, player2;
    private Opponent activePlayer;
 
    public TicTacToe(Opponent player1, Opponent player2) {
        field = new Field();
     
        this.player1 = player1;
        this.player2 = player2;
    }
 
    public void start() {
        activePlayer = (new Random().nextInt(2) == 0) ? player1 : player2;
        printField();
     
        for(int i = 1; i <= 9; i++) {
            System.out.println(activePlayer.getName() + " it is your turn...");
         
            int move;
            do {
                move = activePlayer.getRequestedMove();
            } while(! field.setPlayerSymbolAt(activePlayer.getSymbol(), move));
         
            printField();
         
            if(checkWin()) {
                System.out.println(activePlayer.getName() + " you won!");
                return;
            } else {
                togglePlayer();
            }
        }
     
        System.out.println("It's a tie!");
    }
 
    private boolean checkWin() {
        // TODO
        return false;
    }
 
    private void printField() {
        for(char[] line : field.getFieldReadOnly()) {
            System.out.println(Arrays.toString(line));
        }
        System.out.println();
    }
 
    private void togglePlayer() {
        activePlayer = (activePlayer.equals(player2)) ? player1 : player2;
    }
 
    public static void main(String... arg) {
        new TicTacToe(new HumanPlayer('X', "Max"), new HumanPlayer('O', "Moritz"))
                .start();     
    }
}

Java:
package javaforum.org.tictactoe;


public abstract class Opponent {
    protected char symbol;
    protected String name;
 
    public Opponent(char symbol, String name) {
        this.symbol = symbol;
        this.name = name;
    }
 
    public final String getName() {
        return name;
    }
 
    public final char getSymbol() {
        return symbol;
    }
 
    public abstract int getRequestedMove();
}

Java:
package javaforum.org.tictactoe;

import java.util.Scanner;


public class HumanPlayer extends Opponent {
    private static Scanner scanner;

    public HumanPlayer(char symbol, String name) {
        super(symbol, name);
     
        if(scanner == null) {
            scanner = new Scanner(System.in);
        }
    } 
 
    @Override
    public int getRequestedMove() {
        do {
            System.out.println("Please choose a field (1-9):");
            try {
                int choice = Integer.valueOf(scanner.nextLine());
             
                if(1 <= choice && choice <= 9) return choice;
            } catch(NumberFormatException e) { }
        } while(true);
    } 
}

Java:
package javaforum.org.tictactoe;


public class AIPlayer extends Opponent {
 
    public AIPlayer(char symbol, String name) {
        super(symbol, name);
    }
 
    @Override
    public int getRequestedMove() {
        // TODO
     
        return 0;
    }
}

Java:
package javaforum.org.tictactoe;

public class Field {
    private static final char DEFAULT = '-';
 
    private final char[][] field;
 
    public Field() {
        this.field = new char[][]{
            {DEFAULT, DEFAULT, DEFAULT},
            {DEFAULT, DEFAULT, DEFAULT},
            {DEFAULT, DEFAULT, DEFAULT}
        };
    }
 
    public char[][] getFieldReadOnly() {
        return field.clone();
    }
 
    public boolean setPlayerSymbolAt(char playerSymbol, int index) {
        int x = (index - 1) / 3;
        int y = (index - 1) % 3;
     
        if(field[x][y] != DEFAULT) {
            return false;
        } else {
            field[x][y] = playerSymbol;
            return true;
        }
    }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Matze 12 häufige Fehler beim Programmieren lernen Java Basics - Anfänger-Themen 2
Juelin jedit Fehler beim starten Java Basics - Anfänger-Themen 2
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
S Fehler beim Programm Java Basics - Anfänger-Themen 2
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
M Compiler-Fehler Fehler beim Ausführen des Codes Java Basics - Anfänger-Themen 25
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
Kirby.exe Fehler beim Ausgeben Java Basics - Anfänger-Themen 2
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
L Fehler beim laden eines Icons Java Basics - Anfänger-Themen 3
U Best Practice Fehleranalyse, welche Fehler macht Ihr beim Lernen bzw. auch später Java Basics - Anfänger-Themen 12
M GUI - Fehler abfangen beim Dividieren Java Basics - Anfänger-Themen 8
E Fehler beim Debuggen einer jsp-Datei Java Basics - Anfänger-Themen 3
J Fehler beim Runden Java Basics - Anfänger-Themen 3
V Klassen Fehler beim compilieren einer Datei in CamelCase Java Basics - Anfänger-Themen 2
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
S Compiler-Fehler Anfänger sucht Hilfe. Fehler beim Compilieren Java Basics - Anfänger-Themen 6
B Input/Output Fehler beim Übertragen eines ObjectOutputStreams. Java Basics - Anfänger-Themen 0
T Fehler beim ActionListener Java Basics - Anfänger-Themen 2
W Fehler beim verlängern des Arrays Java Basics - Anfänger-Themen 5
S Fehler beim Ausführen Java Basics - Anfänger-Themen 5
S Seriealiserung Fehler beim Landen Java Basics - Anfänger-Themen 1
R [Erledigt]Fehler beim löschen von einzelnen Buchstaben aus StringBuilder Java Basics - Anfänger-Themen 1
N Fehler beim importieren vom package Java Basics - Anfänger-Themen 2
I beim auslesen der Properties gibt es ein Fehler Java Basics - Anfänger-Themen 7
T Fehler beim Schreiben in Dateien! Java Basics - Anfänger-Themen 4
A Erste Schritte Nicht zu findender Fehler beim Auslesen eines Buchstabens Java Basics - Anfänger-Themen 4
X Fehler beim Öffnen von Jar Datei: "kein Hauptmanifestattribut" Java Basics - Anfänger-Themen 5
B Erste Schritte Fehler beim starten Java Basics - Anfänger-Themen 12
A Resize-Fehler (nur) beim waagrecht Verkleinern Java Basics - Anfänger-Themen 5
S brauche hilfe beim fehler finden Java Basics - Anfänger-Themen 2
1 Erste Schritte ständige Fehler beim Ausführen von Hello World Java Basics - Anfänger-Themen 6
S fehler beim datum parsen Java Basics - Anfänger-Themen 6
F Genereller Fehler beim Starten des Javaprogramms Java Basics - Anfänger-Themen 3
K taschenrechner - Fehler beim Kürzen eines Bruches finden Java Basics - Anfänger-Themen 20
G Fehler beim Umwandeln eines Strings in int Java Basics - Anfänger-Themen 8
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
F HttpURLConnection Fehler beim Quelltext holen Java Basics - Anfänger-Themen 6
S Fehler beim Auslösen des ActionListeners in Verbindung mit einer Queue Java Basics - Anfänger-Themen 5
D Fehler beim Compilen Java Basics - Anfänger-Themen 8
A Fehler beim Umschreiben in Array Java Basics - Anfänger-Themen 6
K Fehler beim Einfügen eines Programm Icons Java Basics - Anfänger-Themen 6
J Compiler-Fehler .jar Datei erstellt aber beim Ausführen Fehler Java Basics - Anfänger-Themen 5
M Fehler beim Übergeben von Daten an JTable Java Basics - Anfänger-Themen 14
T Fehler beim Konvertieren (String --> Float) Java Basics - Anfänger-Themen 5
H TicTacToe Fehler beim Compilieren Java Basics - Anfänger-Themen 7
S mögliche Fehler beim Initialisieren von Variablen Java Basics - Anfänger-Themen 19
N Datentypen Fehler beim Umwandeln in byte Java Basics - Anfänger-Themen 3
StrikeTom Fehler beim Audiodatei abspielen Java Basics - Anfänger-Themen 4
M Fehler beim Ausführen von runable Jar Java Basics - Anfänger-Themen 9
StrikeTom Fehler beim bildanzeigen Java Basics - Anfänger-Themen 10
A jexcelapi fehler beim einrichten Java Basics - Anfänger-Themen 2
M Fehler beim Compilieren Java Basics - Anfänger-Themen 2
S Fehler beim berechnen von MD5 Java Basics - Anfänger-Themen 7
M Fehler beim Compilieren Java Basics - Anfänger-Themen 4
J Fehler beim Ausführen von Programm Java Basics - Anfänger-Themen 3
D Class not found fehler beim ausführen unter konsole : / Java Basics - Anfänger-Themen 2
S Fehler beim Speichern von MP3-Stream Java Basics - Anfänger-Themen 6
R Derby-Datenbank: Fehler beim Zugriff im Embedded Modus Java Basics - Anfänger-Themen 27
G Fehler beim builden javax...... Java Basics - Anfänger-Themen 4
L Fehler beim Aufruf eines Applet Java Basics - Anfänger-Themen 2
hdi Fehler beim Model-Update einer JList (DefaultListModel) Java Basics - Anfänger-Themen 3
C Fehler beim ausgführen von Java App als nicht Admin u. Vista Java Basics - Anfänger-Themen 6
G Fehler beim Ausführen HILFE! Java Basics - Anfänger-Themen 12
H JavaMail: Beim Versenden tritt ein Fehler auf! Java Basics - Anfänger-Themen 4
G Fehler beim ausführen einer JSP Java Basics - Anfänger-Themen 5
K Fehler beim complieren Java Basics - Anfänger-Themen 5
0 Folgender Fehler beim Ausführen eines Java Programms Java Basics - Anfänger-Themen 8
R fehler beim incrementellen schreiben in einen vector Java Basics - Anfänger-Themen 11
O Linux - Fehler beim kompilieren - HILFE Java Basics - Anfänger-Themen 4
T Fehler beim Compilieren Java Basics - Anfänger-Themen 5
G Fehler beim Aufruf eine Javamethode über JSP Java Basics - Anfänger-Themen 8
G Fehler beim erneuten Öffnen von JInternalFrame Java Basics - Anfänger-Themen 7
R Fehler beim Programm Java Basics - Anfänger-Themen 20
G Fehler beim ausführen. Java Basics - Anfänger-Themen 3
W Fehler beim ausführen der Javadateien Java Basics - Anfänger-Themen 3
C Fehler beim build. nur wo? Java Basics - Anfänger-Themen 2
B Fehler beim einbinden eines Packages Java Basics - Anfänger-Themen 6
J Fehler beim Starten der .class Java Basics - Anfänger-Themen 21
V Fehler beim Kompilieren der Unterklasse Java Basics - Anfänger-Themen 2
G Fehler beim kompilieren Java Basics - Anfänger-Themen 18
E Fehler NullPointer beim Ausführen Java Basics - Anfänger-Themen 4
W Fehler beim Compilen Java Basics - Anfänger-Themen 9
D [JCreator] Einrichten - Fehler beim Kompilieren Java Basics - Anfänger-Themen 14
T Chaosprogrammierer hat einen fehler beim casten? Java Basics - Anfänger-Themen 5
D Fehler beim Aufrufen von Instanzvariablen Java Basics - Anfänger-Themen 5
M Problem beim Aufruf einer Methode: Wo is der Fehler? Java Basics - Anfänger-Themen 12
D Fehler beim kompilieren einer Java-Datei (javac) Java Basics - Anfänger-Themen 6
F Fehler beim Schreiben wenn Datei schreibgeschützt abfangen Java Basics - Anfänger-Themen 6
I Fehler beim Compilen Java Basics - Anfänger-Themen 10
T Fehler beim Laden eines Applets Java Basics - Anfänger-Themen 16
O Programm-Fehler beim einlesen von RGB werten Java Basics - Anfänger-Themen 5
F Fraktal fehler beim kompalieren Java Basics - Anfänger-Themen 5
M Fehler beim ein- und auslesen einer Textdatei Java Basics - Anfänger-Themen 5
L Fehler beim ausführen! Java Basics - Anfänger-Themen 14
C Fehler beim Starten einer *.jar Datei Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben