Возврат 2D-массива из метода с использованием имени класса в качестве входных данных - PullRequest
0 голосов
/ 14 февраля 2020

Я получаю сообщение об ошибке «Несоответствие типов не может быть преобразовано из строки [] [] в GameBoard [] []» в строке return gameBoard;. Как я могу изменить этот свой класс GameBoard publi c, чтобы я мог возвращать строковые значения в 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;

    }```


1 Ответ

1 голос
/ 14 февраля 2020

Это происходит потому, что вы сообщаете компилятору, что собираетесь возвращать тип GameBoard[][], но на самом деле возвращаете тип String[][], вы, вероятно, запутались, назвав переменную-член так же, как назвали свой класс. Вы, вероятно, хотите придумать менее запутанное имя для этого.

Как правило, вы подходите к определению класса для вашей GameBoard, так как вы, вероятно, захотите позже выполнить с ним другие действия, например, move() содержимое из одной ячейки в другую или что-то еще. Но помните, что ваш «клиентский класс» не знает, как выглядит интерьер вашего класса, и поэтому вы не можете просто сохранить 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...