【问题标题】:Sharing a declared array between two classes - Java在两个类之间共享声明的数组 - Java
【发布时间】:2018-06-20 21:51:41
【问题描述】:

在 OOP 的良好实践中,我试图将我的一些方法分成两个类(不是主类)。

两个类都需要这个特定的二维数组,以便正确执行程序的功能:

private char [][] board = new char[7][8];

我不确定如何在一个类中声明它并能够在下一个类中正确访问它,以便按预期执行功能。

public class DisplayBoard {


public void printBoard(){

for(int i=1; i<board.length; i++){
    for(int j=0; j<board[i].length-1; j++){
        if(board[i][j] != '\0'){
            System.out.print("| " + board[i][j] + " ");
        }
        else{
            System.out.print("|   ");
        }
    }
    System.out.println("|");
}
System.out.println("  1   2   3   4   5   6   7");
     }
   }

我的问题是如何在一个类中编写/重写此数组的声明,以便可以在两个类中访问它?

其他类的部分代码如下

public class Board {

    public void placeCounter(char player, int move){
        boolean placed = false;
        for(int i=board.length-1; i>=0; i--) {
            if(!placed) {
                if(board[i][move -1 ] == '\0') {
                    board[i][move -1] = player;
                    placed = true;
                }
            }
         }
    }

}

【问题讨论】:

  • 如果两个类都需要相同的数组,它们真的应该是不同的类吗?
  • "在 OOP 的良好实践中,我试图将我的一些方法分成两个类" - 谁说这是好的实践?
  • 您可以实现toString() 方法,或public char getBoardField(x,y),或public char[][] getBoard(),可能会返回一个副本以防止对私有板的修改,或者...
  • 鉴于更新,我仍然不确定为什么您需要一个单独的类来打印板。直接在Board 中使用该方法有什么问题?
  • 它是为了将来在重构GUI等时使用。方法的分离允许将游戏方法组合在一起,但与实际的游戏框架分开。

标签: java arrays class oop


【解决方案1】:

查看您提到的两个类,您似乎有一个 Board 类,其职责是创建和维护实际的板配置(在本例中为位置),而另一个类的职责是仅以特定格式显示.

从设计的角度来看,BoardPrinter 类应该实现为具有适当接口的策略,该接口将位置数组作为输入,然后将此 BoardPrinter 类注入到 Board 类中,以便 Board 类可以调用特定的打印策略当它想要展示自己时。像这样的:

interface PositionPrinter {
    public void printPositions(char[][] board);        
}

class BoardPrinter implements PositionPrinter {
    public void printPositions(char[][] board) {
        // Do a Board specific printing.
    }
}

class Board {
    public PositionPrinter positionPrinter;
    private final char [][] positions = new char[7][8];

    public char[][] getPositions() {
        return positions;
    }

    public void printBoard() {
        positionPrinter.printPositions(positions);
    }
}

【讨论】:

    【解决方案2】:

    您的问题不完整,但这里有一种方法可以说明如何访问它。

    public class Board {
        private char [][] positions = new char[7][8];
    
        //getters and setters
    
    }
    
    public class Another {
        Board board;
    
        public void printBoard(){
            board.getPositions();
        }
    
    }
    

    【讨论】:

    • 可以,但要看作者的班级实际关系
    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    • @TimothyTruckle 你是对的,但我真的不明白问题是什么。首先他必须更新他的问题。
    • 我真的不明白问题是什么。” - 你为什么写一个推测性的答案而不是在 cmets 中要求澄清?
    • @Turing85 因为问题是推测性的。
    猜你喜欢
    • 2012-10-26
    • 1970-01-01
    • 2017-02-21
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多