繁体   English   中英

Java:对象的封装和数组

[英]Java: Encapsulation and array of objects

我正在用Java做井字游戏,以复习一些Java概念并练习OOP。 到目前为止,我有4个班级: BoardPlayerCoordinateGame 我在测试Board类时遇到问题。 电路板由一组坐标组成。 当前Board有两种不同的构造函数。 采用单个Coordinate的构造函数主要是出于测试目的。

Board.java

public class Board {

    private Coordinate squares;
    private Coordinate[] coordinateSet;

    public Board(Coordinate squares) {
        this.squares = squares;
    }

    public Board(Coordinate[] coordinateSet) {
        this.coordinateSet = coordinateSet;
    }

    public Coordinate getSquares() {
        return squares;
    }

    public Coordinate[] getCoordinates() {
        return coordinateSet;
    }

    public Coordinate getCoordinate(int i) {
        return coordinateSet[i];
    }
}

座标

public class Coordinate {

    private int x;
    private int y;
    private int xFlag; // 0 if available, 1 if not available
    private int yFlag; // 0 if available, 1 if not available
    private boolean squareAvailability;

    public Coordinate(int x, int y, int xFlag, int yFlag) {
        this.x = x;
        this.y = y;
        this.xFlag = xFlag;
        this.yFlag = yFlag;
    }

    public int getXCoordinate() {
        return x;
    }

    public int getYCoordinate() {
        return y;
    }

    public int getXFlag() {
        return xFlag;
    }

    public int getYFlag() {
        return yFlag;
    }

    public void setXFlag() {
        if(xFlag == 0) {
            xFlag = 1;
        } else { }
    }

    public void setYFlag() {
        if(yFlag == 0) {
            yFlag = 1;
        } else { }
    }

    public void add(Coordinate coordinate) {
        // TODO Auto-generated method stub

    }

    public boolean isSquareAvailable(Coordinate coordinate) {
        if(coordinate.getXFlag() == 0) {
            if(coordinate.getYFlag() == 0) {
                squareAvailability = true;
            } else {
                squareAvailability = false;
            }
        } else {
            squareAvailability = false;
        }       

        return squareAvailability;
    }

}

BoardTest.java

import edu.learning.tictactoe.Board;
import edu.learning.tictactoe.Coordinate;

public class BoardTest {

    public static void main(String[] args) {
        Coordinate[] coordinates = new Coordinate[9];   
        Coordinate coordinate = new Coordinate(0, 0, 0, 0);
        for(int i = 0; i < 3; i++) {
            for(int j = 0; j < 3; j++) {
                coordinates[i + j] = new Coordinate(i, j, 0, 0);
            }
        }
        Board board = new Board(coordinate);
        System.out.println(board.getSquares().getXCoordinate());
        Board board2 = new Board(coordinates);
        System.out.println(board2.getCoordinates().getCoordinate(0).getXCoordinate()); // error
    }
}

我在IDE的BoardTest.java的最后一行收到错误,我Cannot invoke getCoordinate(int) on the array type Coordinate[] 问题是,我试图返回Coordinate从数组对象Coordinate的对象,这是不可能的(?)所以我怎么会返回一个Coordinate从数组Coordinate S'

board.getCoordinates()返回一个数组,并且编译器错误告诉您该数组没有方法getCoordinate(int)

只需写

board.getCoordinate(0).getXCoordinate()

如果要通过数组访问坐标,可以编写

board.getCoordinates()[0].getXCoordinate()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM