Java/String und Java/TicTacToe: Unterschied zwischen den Seiten

Aus ZUM-Unterrichten
< Java(Unterschied zwischen Seiten)
K (9 Versionen importiert)
 
main>Ugh
(→‎Variante mit GUI: + Erläuterung)
 
Zeile 1: Zeile 1:
{{Zitat wpde|
{{Babel-1|Java}}
Eine '''Zeichenkette''' oder ein '''String''' (englisch) ist eine Folge von Zeichen (z.B. Buchstaben, Ziffern, Sonderzeichen, und Steuerzeichen) aus einem definierten Zeichensatz. Zeichen können sich in einer Zeichenkette wiederholen, die Reihenfolge der Zeichen ist definiert. Zeichenketten sind Symbolsequenzen endlicher Länge.


Mit '''Zeichenkette''' wird in der Programmierung auch ein Datentyp bezeichnet, der Zeichenketten (Texte) fester oder variabler Länge enthalten kann. Fast jede Programmiersprache besitzt einen derartigen Datentyp.
==Variante mit Konsolenein- und ausgabe==
|Zeichenkette|09.12.2006}}
Eine einfache TicTacToe-Variante für [[BlueJ]]. Ein und Ausgabe in der Konsole.


<java>
import java.io.*; // wird von der Eingabe benötigt


Technisch gesehen ist ein String in [[Java]] eine Aneinanderreihung von Einzelbuchstaben (vgl. Datentyp char – ein einzelner Buchstabe).
public class Spielfeld {
String ist eine Klasse, deshalb wird String auch im Gegensatz zu int oder double groß geschieben.
    //Eigenschaften
Ein vereinfachtes Klassendiagramm von String könnte so aussehen:
    private Kaestchen[][] feld;
String hat viele Methoden, von denen Sie jetzt 3 kennen lernen sollen. Die folgende Klasse bietet eine zugegeben sehr unsaubere Möglichkeit, die Methoden von String zu testen.  
    private static BufferedReader in; // Eingabe
   
    //Konstruktor
    public Spielfeld() {
        feld = new Kaestchen[3][3];
        for (int i=0;i<3;i++){// senkrecht
            for (int j=0;j<3;j++){// waagerecht
                feld[j][i]=new Kaestchen();
            }
        }
       
        // Vorbereitung für die Eingabe
        in = new BufferedReader(new InputStreamReader(System.in));
                             
    }
   
    //Methoden
    public void setzeSpielstein(int x, int y, String stein){
        feld[x][y].setzeStein(stein);
    }
   
    public void gibSpielAus(){
        System.out.println("\n  012");
        for (int i=0;i<3;i++){
            System.out.print(i+" ");
            for (int j=0;j<3;j++){
                System.out.print(feld[j][i].getZeichen());
            }
            System.out.println(); // Zeilenumbruch nach 3 Kaestchen
        }
       
    }
   
    public void spieleEineRunde(){
        // unguenstig: Starre Anzahl von Zügen, immer 10 Züge
        int x,y;
        for (int i=1;i<5;i++){
            gibSpielAus();
            System.out.print("Spieler X bitte die x-Koordinate (0-2)");
            try {
            x=liesInt();
            }
            catch(IOException e) {
            x=-1;
            }
            System.out.print("Spieler X bitte die y-Koordinate (0-2)");
            try {
            y=liesInt();
            }
            catch(IOException e) {
            y=-1;
            }
            setzeSpielstein(x, y, "X");
            gibSpielAus();
            System.out.print("Spieler O bitte die x-Koordinate (0-2)");
            try {
            x=liesInt();
            }
            catch(IOException e) {
            x=-1;
            }
            System.out.print("Spieler O bitte die y-Koordinate (0-2)");
            try {
            y=liesInt();
            }
            catch(IOException e) {
            y=-1;
            }           
            setzeSpielstein(x, y, "O");
        }
    }
   
    // Methode für die Eingabe
    // Mehr hier: http://www.wifo.uni-mannheim.de/Java/oop/OOPinJava/kapitel11/StandardEingabe_java.html
    public int liesInt() throws IOException {
        try {
        return Integer.parseInt(in.readLine());
        }
        catch(IOException e) {
          return (-1);
        }
    }
}
</java>


<source lang="java">
<java>
// eine Klasse, die nur zu Testzwecken existiert!
public class Kaestchen {
public class Stringtest
    String zeichen;
{
   
         public Stringtest(String s){
    public Kaestchen() {
            System.out.println(s);
         zeichen=" "; // Am Anfang leer
            System.out.println(s.length());
    }
             System.out.println(s.charAt(0));
   
             System.out.println(s.charAt(s.length()-1));
    public void setzeStein(String pZeichen) {
            System.out.println(s.equals(“Hallo“));
        if (!zeichen.equals(" ")) {System.out.println("Besetzt!");}
        }      
        else {
             if (pZeichen.equals("X") || pZeichen.equals("O")) {zeichen=pZeichen;}
             else System.out.println("Ungueltige Eingabe, bitte X oder O waehlen!");
        }
    }
   
    public String getZeichen(){
        return zeichen;
    }
}
}
</source>
</java>
 
==Variante mit GUI==
 
Die folgende Variante wurde mit Netbeans-BlueJ erstellt. Sie soll ein Beispiel für den Umgang mit GUIs sein.
 
<java>
/*
* TicTacGUI.java
*
* Created on 12. März 2007, 19:15
*/
 
/**
*
* @author  ugh
*/
public class TicTacGUI extends javax.swing.JFrame {
    private int amZug;   
    /** Creates new form TicTacGUI */
    public TicTacGUI() {
        initComponents();
        amZug=0;
        textField2.setText("0 startet das Spiel.");
        label1.setText("Tic-Tac-Toe");
        button1.setLabel("_");
        button2.setLabel("_");
        button3.setLabel("_");
        button4.setLabel("_");
        button5.setLabel("_");
        button6.setLabel("_");
        button7.setLabel("_");
        button8.setLabel("_");
        button9.setLabel("_");       
    }
   
    /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        button1 = new java.awt.Button();
        button2 = new java.awt.Button();
        button3 = new java.awt.Button();
        button4 = new java.awt.Button();
        button5 = new java.awt.Button();
        button6 = new java.awt.Button();
        button7 = new java.awt.Button();
        button8 = new java.awt.Button();
        button9 = new java.awt.Button();
        textField1 = new java.awt.TextField();
        label1 = new java.awt.Label();
        textField2 = new java.awt.TextField();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        button1.setLabel("button1");
        button1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                button1MouseClicked(evt);
            }
        });
 
        button2.setLabel("button2");
        button2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                button2MouseClicked(evt);
            }
        });


;Erläuterung:
        button3.setLabel("button3");
* ''s.length()'' ergibt die Anzahl der Zeichen von s.
        button3.addMouseListener(new java.awt.event.MouseAdapter() {
* ''s.charAt(0)'' ergibt das erste Zeichen von String s. Position 0 entspricht dem ersten Zeichen.
            public void mouseClicked(java.awt.event.MouseEvent evt) {
* ''s.charAt(1)'' würde das zweite Zeichen ergeben usw.
                button3MouseClicked(evt);
* ''s.charAt(s.length()-1)'' ergibt das letzte Zeichen von s.
            }
* ''System.out.println(s.equals("Hallo"))'' gibt ein true aus, wenn s dem String „Hallo“ entspricht, ansonsten wird false ausgegeben. Auf diese Weise lassen sich 2 String Variablen oder Eigenschaften miteinander vergleichen
        });


        button4.setLabel("button4");
        button4.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                button4MouseClicked(evt);
            }
        });


{{Übung|
        button5.setLabel("button5");
# Warum wird die -1 bei s.charAt(s.length()-1) verwendet?
        button5.addMouseListener(new java.awt.event.MouseAdapter() {
# Welche Länge hat ein leerer String? Lässt sich der erste Buchstabe eines leeren Strings ausgeben?
            public void mouseClicked(java.awt.event.MouseEvent evt) {
# Ein Wort mit 5 Buchstaben (z.B. „Hallo“), das von BlueJ als Parameter eingelesen wird,  soll rückwärts in der Konsole erscheinen. Verändern Sie die Methode Stringtest entspre­chend.
                button5MouseClicked(evt);
# Recherchieren Sie im Internet über die Möglichkeiten von Strings bei Java.
            }
#* Schauen Sie z.B. hier:
        });
#* http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html (offizielle Java-Doku­mentation der Firma Sun)
#* http://www.galileocomputing.de/openbook/javainsel4/javainsel_04_000.htm#Rxx365java04000040001241F021100  (Kostenlos im Internet verfügbares Java-Buch, was für den Unterricht viel zu weit  geht, das Sie sich aber anschauen sollten, falls Sie das Thema privat interessiert)
#* http://de.wikibooks.org/wiki/Programmierkurs_Java:_Strings Hintergrundinforma­tionen zu Strings als Wikibook.
}}


==Siehe auch==
        button6.setLabel("button6");
* [[Java]]
        button6.addMouseListener(new java.awt.event.MouseAdapter() {
* [[Informatik]]
            public void mouseClicked(java.awt.event.MouseEvent evt) {
* [[Mathematik]]
                button6MouseClicked(evt);
            }
        });


        button7.setLabel("button7");
        button7.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                button7MouseClicked(evt);
            }
        });
        button8.setLabel("button8");
        button8.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                button8MouseClicked(evt);
            }
        });
        button9.setLabel("button9");
        button9.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                button9MouseClicked(evt);
            }
        });
        textField1.setText("textField1");
        label1.setText("label1");
        textField2.setText("textField2");
        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(25, 25, 25)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(layout.createSequentialGroup()
                        .add(textField2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE)
                        .addContainerGap())
                    .add(layout.createSequentialGroup()
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(label1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(layout.createSequentialGroup()
                                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
                                    .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
                                        .add(button7, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 20, Short.MAX_VALUE)
                                        .add(button8, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                                    .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
                                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                                            .add(button1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                            .add(button4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                                        .add(20, 20, 20)
                                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                                            .add(button5, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                            .add(button2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))))
                                .add(29, 29, 29)
                                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                                    .add(button6, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                    .add(button9, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                    .add(button3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                                .add(55, 55, 55))
                            .add(textField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 275, Short.MAX_VALUE))
                        .add(75, 75, 75))))
        );
        layout.linkSize(new java.awt.Component[] {button1, button2, button3, button4, button5, button6, button7, button8, button9}, org.jdesktop.layout.GroupLayout.HORIZONTAL);
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .add(label1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(textField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .add(23, 23, 23)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                    .add(button2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(button1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(button3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .add(10, 10, 10)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(layout.createSequentialGroup()
                        .add(button6, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .add(0, 0, 0))
                    .add(button5, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, button4, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                        .add(button7, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED))
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                        .add(button9, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .add(button8, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(textField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        layout.linkSize(new java.awt.Component[] {button1, button2, button3, button4, button5, button6, button7, button8, button9}, org.jdesktop.layout.GroupLayout.VERTICAL);
        pack();
    }// </editor-fold>//GEN-END:initComponents
    private void button9MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button9MouseClicked
        if (button9.getLabel()=="_") {
            if (amZug==0) button9.setLabel("0");
            else button9.setLabel("X");
            werteAus(2,2);
        }
        else {
            textField1.setText("Hier ist schon ein Stein!");
        }
    }//GEN-LAST:event_button9MouseClicked
    private void button8MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button8MouseClicked
        if (button8.getLabel()=="_") {
            if (amZug==0) button8.setLabel("0");
            else button8.setLabel("X");
            werteAus(1,2);
        }
        else {
            textField1.setText("Hier ist schon ein Stein!");
        }
    }//GEN-LAST:event_button8MouseClicked
    private void button7MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button7MouseClicked
        if (button7.getLabel()=="_") {
            if (amZug==0) button7.setLabel("0");
            else button7.setLabel("X");
            werteAus(0,2);
        }
        else {
            textField1.setText("Hier ist schon ein Stein!");
        }
    }//GEN-LAST:event_button7MouseClicked
    private void button6MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button6MouseClicked
        if (button6.getLabel()=="_") {
            if (amZug==0) button6.setLabel("0");
            else button6.setLabel("X");
            werteAus(2,1);
        }
        else {
            textField1.setText("Hier ist schon ein Stein!");
        }
    }//GEN-LAST:event_button6MouseClicked
    private void button5MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button5MouseClicked
        if (button5.getLabel()=="_") {
            if (amZug==0) button5.setLabel("0");
            else button5.setLabel("X");
            werteAus(1,1);
        }
        else {
            textField1.setText("Hier ist schon ein Stein!");
        }
    }//GEN-LAST:event_button5MouseClicked
    private void button4MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button4MouseClicked
        if (button4.getLabel()=="_") {
            if (amZug==0) button4.setLabel("0");
            else button4.setLabel("X");
            werteAus(0,1);
        }
        else {
            textField1.setText("Hier ist schon ein Stein!");
        }
    }//GEN-LAST:event_button4MouseClicked
    private void button3MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button3MouseClicked
        if (button3.getLabel()=="_") {
            if (amZug==0) button3.setLabel("0");
            else button3.setLabel("X");
            werteAus(2,0);
        }
        else {
            textField1.setText("Hier ist schon ein Stein!");
        }
    }//GEN-LAST:event_button3MouseClicked
    private void button2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button2MouseClicked
        if (button2.getLabel()=="_") {
            if (amZug==0) button2.setLabel("0");
            else button2.setLabel("X");
            werteAus(1,0);
        }
        else {
            textField1.setText("Hier ist schon ein Stein!");
        }
    }//GEN-LAST:event_button2MouseClicked
    private void button1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button1MouseClicked
        if (button1.getLabel()=="_") {
            if (amZug==0) button1.setLabel("0");
            else button1.setLabel("X");
            werteAus(0,0);
        }
        else {
            textField1.setText("Hier ist schon ein Stein!");
        }
    }//GEN-LAST:event_button1MouseClicked
   
    private void werteAus(int pX, int pY){
        if (amZug==0) {
            amZug=1;
            textField2.setText("X setzt nun.");
        }
        else {
            amZug=0;
            textField2.setText("O ist dran."); 
        }
    }
   
   
    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TicTacGUI().setVisible(true);
            }
        });
    }
   
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private java.awt.Button button1;
    private java.awt.Button button2;
    private java.awt.Button button3;
    private java.awt.Button button4;
    private java.awt.Button button5;
    private java.awt.Button button6;
    private java.awt.Button button7;
    private java.awt.Button button8;
    private java.awt.Button button9;
    private java.awt.Label label1;
    private java.awt.TextField textField1;
    private java.awt.TextField textField2;
    // End of variables declaration//GEN-END:variables
   
}
</java>


[[Kategorie:Informatik]]
[[Kategorie:Java]]
[[Kategorie:Java]]
[[Kategorie:Unterrichtsideen/Informatik]]

Version vom 13. März 2007, 05:56 Uhr

Vorlage:Babel-1

Variante mit Konsolenein- und ausgabe

Eine einfache TicTacToe-Variante für BlueJ. Ein und Ausgabe in der Konsole.

<java> import java.io.*; // wird von der Eingabe benötigt

public class Spielfeld {

   //Eigenschaften
   private Kaestchen[][] feld;
   private static BufferedReader in; // Eingabe
   
   //Konstruktor
   public Spielfeld() {
       feld = new Kaestchen[3][3];
       for (int i=0;i<3;i++){// senkrecht
           for (int j=0;j<3;j++){// waagerecht
               feld[j][i]=new Kaestchen();
           }
       }
       
       // Vorbereitung für die Eingabe
       in = new BufferedReader(new InputStreamReader(System.in));
                             
   }
   
   //Methoden
   public void setzeSpielstein(int x, int y, String stein){
       feld[x][y].setzeStein(stein);
   }
   
   public void gibSpielAus(){
       System.out.println("\n  012");
       for (int i=0;i<3;i++){
           System.out.print(i+" ");
           for (int j=0;j<3;j++){
               System.out.print(feld[j][i].getZeichen());
           }
           System.out.println(); // Zeilenumbruch nach 3 Kaestchen
       }
       
   }
   
   public void spieleEineRunde(){
       // unguenstig: Starre Anzahl von Zügen, immer 10 Züge
       int x,y;
       for (int i=1;i<5;i++){
           gibSpielAus();
           System.out.print("Spieler X bitte die x-Koordinate (0-2)");
           try {
           x=liesInt();
           }
            catch(IOException e) {
           x=-1;
           }
           System.out.print("Spieler X bitte die y-Koordinate (0-2)");
           try {
           y=liesInt();
           }
           catch(IOException e) {
           y=-1;
           }
           setzeSpielstein(x, y, "X");
           gibSpielAus();
           System.out.print("Spieler O bitte die x-Koordinate (0-2)");
           try {
           x=liesInt();
           }
            catch(IOException e) {
           x=-1;
           }
           System.out.print("Spieler O bitte die y-Koordinate (0-2)");
           try {
           y=liesInt();
           }
           catch(IOException e) {
           y=-1;
           }            
           setzeSpielstein(x, y, "O");
       }
   }
   
   // Methode für die Eingabe
   // Mehr hier: http://www.wifo.uni-mannheim.de/Java/oop/OOPinJava/kapitel11/StandardEingabe_java.html
   public int liesInt() throws IOException {
       try {
       return Integer.parseInt(in.readLine());
       }
       catch(IOException e) {
         return (-1);
       }
   }

} </java>

<java> public class Kaestchen {

   String zeichen;
   
   public Kaestchen() {
       zeichen=" "; // Am Anfang leer
   }
   
   public void setzeStein(String pZeichen) {
       if (!zeichen.equals(" ")) {System.out.println("Besetzt!");} 
       else {
           if (pZeichen.equals("X") || pZeichen.equals("O")) {zeichen=pZeichen;} 
           else System.out.println("Ungueltige Eingabe, bitte X oder O waehlen!");
       }
   }
   
   public String getZeichen(){
       return zeichen;
   }

} </java>

Variante mit GUI

Die folgende Variante wurde mit Netbeans-BlueJ erstellt. Sie soll ein Beispiel für den Umgang mit GUIs sein.

<java> /*

* TicTacGUI.java
*
* Created on 12. März 2007, 19:15
*/

/**

*
* @author  ugh
*/

public class TicTacGUI extends javax.swing.JFrame {

   private int amZug;    
   /** Creates new form TicTacGUI */
   public TicTacGUI() {
       initComponents();
       amZug=0;
       textField2.setText("0 startet das Spiel.");
       label1.setText("Tic-Tac-Toe");
       button1.setLabel("_");
       button2.setLabel("_");
       button3.setLabel("_");
       button4.setLabel("_");
       button5.setLabel("_");
       button6.setLabel("_");
       button7.setLabel("_");
       button8.setLabel("_");
       button9.setLabel("_");        
   }
   
   /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
   // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
   private void initComponents() {
       button1 = new java.awt.Button();
       button2 = new java.awt.Button();
       button3 = new java.awt.Button();
       button4 = new java.awt.Button();
       button5 = new java.awt.Button();
       button6 = new java.awt.Button();
       button7 = new java.awt.Button();
       button8 = new java.awt.Button();
       button9 = new java.awt.Button();
       textField1 = new java.awt.TextField();
       label1 = new java.awt.Label();
       textField2 = new java.awt.TextField();
       setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
       button1.setLabel("button1");
       button1.addMouseListener(new java.awt.event.MouseAdapter() {
           public void mouseClicked(java.awt.event.MouseEvent evt) {
               button1MouseClicked(evt);
           }
       });
       button2.setLabel("button2");
       button2.addMouseListener(new java.awt.event.MouseAdapter() {
           public void mouseClicked(java.awt.event.MouseEvent evt) {
               button2MouseClicked(evt);
           }
       });
       button3.setLabel("button3");
       button3.addMouseListener(new java.awt.event.MouseAdapter() {
           public void mouseClicked(java.awt.event.MouseEvent evt) {
               button3MouseClicked(evt);
           }
       });
       button4.setLabel("button4");
       button4.addMouseListener(new java.awt.event.MouseAdapter() {
           public void mouseClicked(java.awt.event.MouseEvent evt) {
               button4MouseClicked(evt);
           }
       });
       button5.setLabel("button5");
       button5.addMouseListener(new java.awt.event.MouseAdapter() {
           public void mouseClicked(java.awt.event.MouseEvent evt) {
               button5MouseClicked(evt);
           }
       });
       button6.setLabel("button6");
       button6.addMouseListener(new java.awt.event.MouseAdapter() {
           public void mouseClicked(java.awt.event.MouseEvent evt) {
               button6MouseClicked(evt);
           }
       });
       button7.setLabel("button7");
       button7.addMouseListener(new java.awt.event.MouseAdapter() {
           public void mouseClicked(java.awt.event.MouseEvent evt) {
               button7MouseClicked(evt);
           }
       });
       button8.setLabel("button8");
       button8.addMouseListener(new java.awt.event.MouseAdapter() {
           public void mouseClicked(java.awt.event.MouseEvent evt) {
               button8MouseClicked(evt);
           }
       });
       button9.setLabel("button9");
       button9.addMouseListener(new java.awt.event.MouseAdapter() {
           public void mouseClicked(java.awt.event.MouseEvent evt) {
               button9MouseClicked(evt);
           }
       });
       textField1.setText("textField1");
       label1.setText("label1");
       textField2.setText("textField2");
       org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
       getContentPane().setLayout(layout);
       layout.setHorizontalGroup(
           layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
           .add(layout.createSequentialGroup()
               .add(25, 25, 25)
               .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                   .add(layout.createSequentialGroup()
                       .add(textField2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE)
                       .addContainerGap())
                   .add(layout.createSequentialGroup()
                       .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                           .add(label1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                           .add(layout.createSequentialGroup()
                               .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
                                   .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
                                       .add(button7, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                       .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 20, Short.MAX_VALUE)
                                       .add(button8, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                                   .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
                                       .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                                           .add(button1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                           .add(button4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                                       .add(20, 20, 20)
                                       .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                                           .add(button5, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                           .add(button2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))))
                               .add(29, 29, 29)
                               .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                                   .add(button6, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                   .add(button9, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                   .add(button3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                               .add(55, 55, 55))
                           .add(textField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 275, Short.MAX_VALUE))
                       .add(75, 75, 75))))
       );
       layout.linkSize(new java.awt.Component[] {button1, button2, button3, button4, button5, button6, button7, button8, button9}, org.jdesktop.layout.GroupLayout.HORIZONTAL);
       layout.setVerticalGroup(
           layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
           .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
               .addContainerGap()
               .add(label1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
               .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
               .add(textField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
               .add(23, 23, 23)
               .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                   .add(button2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                   .add(button1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                   .add(button3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
               .add(10, 10, 10)
               .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                   .add(layout.createSequentialGroup()
                       .add(button6, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                       .add(0, 0, 0))
                   .add(button5, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                   .add(org.jdesktop.layout.GroupLayout.TRAILING, button4, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
               .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
               .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                   .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                       .add(button7, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                       .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED))
                   .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                       .add(button9, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                       .add(button8, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
               .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
               .add(textField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
               .addContainerGap())
       );
       layout.linkSize(new java.awt.Component[] {button1, button2, button3, button4, button5, button6, button7, button8, button9}, org.jdesktop.layout.GroupLayout.VERTICAL);
       pack();
   }// </editor-fold>//GEN-END:initComponents
   private void button9MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button9MouseClicked
       if (button9.getLabel()=="_") {
           if (amZug==0) button9.setLabel("0");
           else button9.setLabel("X");
           werteAus(2,2);
       }
       else {
           textField1.setText("Hier ist schon ein Stein!");
       }
   }//GEN-LAST:event_button9MouseClicked
   private void button8MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button8MouseClicked
       if (button8.getLabel()=="_") {
           if (amZug==0) button8.setLabel("0");
           else button8.setLabel("X");
           werteAus(1,2);
       }
       else {
           textField1.setText("Hier ist schon ein Stein!");
       }
   }//GEN-LAST:event_button8MouseClicked
   private void button7MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button7MouseClicked
       if (button7.getLabel()=="_") {
           if (amZug==0) button7.setLabel("0");
           else button7.setLabel("X");
           werteAus(0,2);
       }
       else {
           textField1.setText("Hier ist schon ein Stein!");
       }
   }//GEN-LAST:event_button7MouseClicked
   private void button6MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button6MouseClicked
       if (button6.getLabel()=="_") {
           if (amZug==0) button6.setLabel("0");
           else button6.setLabel("X");
           werteAus(2,1);
       }
       else {
           textField1.setText("Hier ist schon ein Stein!");
       }
   }//GEN-LAST:event_button6MouseClicked
   private void button5MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button5MouseClicked
       if (button5.getLabel()=="_") {
           if (amZug==0) button5.setLabel("0");
           else button5.setLabel("X");
           werteAus(1,1);
       }
       else {
           textField1.setText("Hier ist schon ein Stein!");
       }
   }//GEN-LAST:event_button5MouseClicked
   private void button4MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button4MouseClicked
       if (button4.getLabel()=="_") {
           if (amZug==0) button4.setLabel("0");
           else button4.setLabel("X");
           werteAus(0,1);
       }
       else {
           textField1.setText("Hier ist schon ein Stein!");
       }
   }//GEN-LAST:event_button4MouseClicked
   private void button3MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button3MouseClicked
       if (button3.getLabel()=="_") {
           if (amZug==0) button3.setLabel("0");
           else button3.setLabel("X");
           werteAus(2,0);
       }
       else {
           textField1.setText("Hier ist schon ein Stein!");
       }
   }//GEN-LAST:event_button3MouseClicked
   private void button2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button2MouseClicked
       if (button2.getLabel()=="_") {
           if (amZug==0) button2.setLabel("0");
           else button2.setLabel("X");
           werteAus(1,0);
       }
       else {
           textField1.setText("Hier ist schon ein Stein!");
       }
   }//GEN-LAST:event_button2MouseClicked
   private void button1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_button1MouseClicked
       if (button1.getLabel()=="_") {
           if (amZug==0) button1.setLabel("0");
           else button1.setLabel("X");
           werteAus(0,0);
       }
       else {
           textField1.setText("Hier ist schon ein Stein!");
       }
   }//GEN-LAST:event_button1MouseClicked


   private void werteAus(int pX, int pY){
       if (amZug==0) {
           amZug=1;
           textField2.setText("X setzt nun.");
       }
       else {
           amZug=0;
           textField2.setText("O ist dran.");   
       }
   }
   
   
   /**
    * @param args the command line arguments
    */
   public static void main(String args[]) {
       java.awt.EventQueue.invokeLater(new Runnable() {
           public void run() {
               new TicTacGUI().setVisible(true);
           }
       });
   }
   
   // Variables declaration - do not modify//GEN-BEGIN:variables
   private java.awt.Button button1;
   private java.awt.Button button2;
   private java.awt.Button button3;
   private java.awt.Button button4;
   private java.awt.Button button5;
   private java.awt.Button button6;
   private java.awt.Button button7;
   private java.awt.Button button8;
   private java.awt.Button button9;
   private java.awt.Label label1;
   private java.awt.TextField textField1;
   private java.awt.TextField textField2;
   // End of variables declaration//GEN-END:variables
   

} </java>