java - 使用类名作为输入从方法返回二维数组

标签 java multidimensional-array

我在 return gameBoard; 行上收到错误消息“类型不匹配无法从 String[][] 转换为 GameBoard[][]”。如何更改我的公共(public)类 GameBoard 以便能够返回 2D 数组中的字符串值? (我不想将方法返回类型更改为 String[][])


public class GameBoard {

    String[][] gameBoard;


    /**
     * Constructor
     */

    public GameBoard() {
        gameBoard = new String[4][5];
    }   

    /**
     * Filling the playable board with Strings
     * @return
     */

     public GameBoard[][] fillGameBoard() {

        gameBoard[0][0] = new String("1");
        gameBoard[0][1] = new String("2");
        gameBoard[0][2] = new String("3");
        gameBoard[0][3] = new String("4");
        gameBoard[0][4] = new String("5");
        gameBoard[1][0] = new String("6");
        gameBoard[1][1] = new String("7");
        gameBoard[1][2] = new String("8");
        gameBoard[1][3] = new String("9");
        gameBoard[1][4] = new String("10");
        gameBoard[2][1] = new String("11");
        gameBoard[2][2] = new String("12");
        gameBoard[2][3] = new String("13");
        gameBoard[3][1] = new String("14");
        gameBoard[3][2] = new String("15");
        gameBoard[3][3] = new String("16");



        return gameBoard;

    }```


最佳答案

发生这种情况是因为您告诉编译器您将返回 GameBoard[][] 类型,但实际上返回的是 String[][] 类型,您可能以与命名类相同的方式命名你的成员变量,这让你自己感到困惑。您可能想为它起一个不那么困惑的名称。

通常,为 GameBoard 定义类的方法很好,因为您可能希望稍后对其执行不同的操作,例如 move() 将内容从 1 个单元格移动到另一个单元格或其他内容。但请记住,您的“客户端类”不知道类的内部外观如何,因此您不能仅将 GameObject 存储为 String[][]反之亦然

这是您的类的示例,其中包含有关如何声明使用 GameBoard 的变量的一些注释以及建议: (这不会按原样工作,您必须删除不想使用的方法,因为它们的返回类型不匹配)

public class GameBoard {

    String[][] gameBoard;

    /**
     * Constructor
     */
    public GameBoard() {
        gameBoard = new String[4][5];
    }   

    // Approach 1
     public void fillGameBoard() {

        gameBoard[0][0] = "1";
        gameBoard[0][1] = "2";
        gameBoard[0][2] = "3";
        gameBoard[0][3] = "4";
        gameBoard[0][4] = "5";
        gameBoard[1][0] = "6";
        gameBoard[1][1] = "7";
        gameBoard[1][2] = "8";
        gameBoard[1][3] = "9";
        gameBoard[1][4] = "10";
        gameBoard[2][1] = "11";
        gameBoard[2][2] = "12";
        gameBoard[2][3] = "13";
        gameBoard[3][1] = "14";
        gameBoard[3][2] = "15";
        gameBoard[3][3] = "16";
    }

    // Approach 2
    // If you really want to go with the way you had your declaration set up
    // GameBoard board = new GameBoard().fillGameBoard();
    // you would have to do this
    public GameBoard fillGameBoard() {
        fillGameBoard();

        return this;
    }

    // Approach 3
    // If you want to do this, you don't need your class at all and your fillGameBoard 
    // has to return a String[][] type. I would recommend against it though,
    // since you are using a highly object oriented language as Java
    public String[][] fillGameBoard() {
        fillGameBoard();

        return gameBoard;
    }

    public static void main(String[] args) {
        // Approach 1
        // I recommend this approach!
        GameBoard board2 = new GameBoard();
        board2.fillGameBoard();

        // Approach 2
        GameBoard board = new GameBoard().fillGameBoard();

        // Approach 3
        String[][] board3 = new GameBoard().fillGameBoard();
    }
}

关于java - 使用类名作为输入从方法返回二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60233239/

相关文章:

java - 使用环境变量 spring boot 在 dynamo db 中动态设置全局二级索引名称

java - 测试 Camel sFTP 端点

java - 使用 Aspectj 加载时间编织来记录我的源代码(包括测试),而不记录外部库

Java无法访问的代码错误

Java Streams,跳过元素列表流中每个列表中的第一项

c - 指向 3D 数组数据切片的 2D 指针数组

php - 内爆二维数组中的数据

Python:字典中 numpy 数组的高效串联

matlab - 关于 ndarrays 的形状不可知切片

php - 多维数组中特定键的数组差异