簡體   English   中英

從使用類名作為輸入的方法返回二維數組

[英]Returning a 2D Array from a method using the class name as the input

我在return gameBoard;行上收到錯誤消息“類型不匹配無法從 String[][] 轉換為 GameBoard[][]” return gameBoard; . 如何更改我的公共類 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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM