2017-03-02 5 views
-2

Code, der Objektarray und toString-Methode erstellt. 2D-Array von Objekten gibt null zurück

import java.util.Arrays; 
public class TicTacToeBoard extends BoardClass{ 

    private int turns; 

    private XOClass[][] a; 

    public TicTacToeBoard(int rows,int cols){ 
     super(rows,cols); 
     XOClass[][]a = new XOClass[rows][cols]; 
     turns = 0; 
    } 
    public String toString(){ 
     return (Arrays.deepToString(a)); 
    } 
} 

Objektklasse


public class XOClass{ 
    private String name; 
    private static int turn=0; 

    public XOClass(){ 
     if (turn==0){ 
      this.name = "-"; 
     } 
     if (turn==1){ 
      this.name = "X"; 
     } 

     else{ 
      this.name = "O"; 

     } 
    } 

Demo Klasse

public class play { 
    public static void main(String[] args){ 
     TicTacToeBoard tac = new TicTacToeBoard(3,3); 
     System.out.println(tac); 

    } 
} 

beim Aufruf Klasse es gibt null zurück zu spielen, da es Noth In dem Array was mache ich falsch mit meinem Code.

+0

Du Einrücken es nicht richtig. Vielleicht solltest du das zuerst beheben. – khelwood

+0

Ändern Sie danach 'XOClass [] [] a = new XOClass [rows] [cols];' in Ihrem Konstruktor zu 'a = new XOClass [rows] [cols];' weil Sie eine Membervariable nicht zuweisen möchten Deklariere eine neue lokale Variable. – khelwood

Antwort

1

In Ihrem Code:

XOClass[][]a = new XOClass[rows][cols];

  1. Sie initialisieren neuen XOClass seine nur in dem Verfahren und wenn das Verfahren zu mißtrauen ist beendet. dass

  2. zu

    a = new XOClass[rows][cols]; ändern Dies bedeutet, dass Sie ein zweidimensionales Array erstellt haben, mit ‚Reihen‘ Reihen. In der ersten Zeile gibt es 'Spalten' Spalten. und alle Zeilen sind null. Nun sollten Sie Zeilen wie erstellen:

a[0] = new XOClass[cols];

Und dann

a[0][0]=new XOClass();