尝试创建一个 returns 二维数组的函数,并在函数内部使用 switch。收到 "Duplicate local variable <board>" 警告

Trying to make a function that returns a 2D array, with using switch inside the function. Getting the "Duplicate local variable <board>" warning

我正在编写一个显示二维数组的简单程序。用户将有 4 个选项可供选择,但为了简单起见,我重写了程序,因此开关中只包含 2 个选项,并且始终会选择第二个选项。该代码不打印任何内容,它只打印“This is your array :”。我在我的错误页面中看到“重复的局部变量板”,但我不知道如何解决这个问题。

这是我的代码:

public class Apples {
    static char[][] createBoard(int boardType) {
        char[][] board = new char[8][10];
        switch (boardType) {
            case 1:
                char board[][] = {
                        {' ', '1', '2', '3', '4', '5', '6', '7', '8', '9'},
                        {'1', '#', '#', '#', '-', '@', '-', '#', '#', '#'},
                        {'2', '#', '#', '-', '@', '@', '@', '-', '#', '#'},
                        {'3', '#', '-', '@', '@', '-', '@', '@', '-', '#'},
                        {'4', '-', '@', '@', '@', '@', '@', '@', '-'}};
                break;
            case 2:
                char board[][] = {
                        {' ', '1', '2', '3', '4', '5'},
                        {'1', '-', '-', '-', '-', '-'},
                        {'2', '-', '@', '@', '@', '-'},
                        {'3', '-', '-', '@', '-', '-'},
                        {'4', '-', '-', '@', '-', '-'},
                        {'5', '-', '-', '-', '-', '-'}};
                break;
        }
        return board;
    }

    public static void main(String args[]) {
        System.out.println("This is your array :");

        char chosenboard[][] = createBoard(2);
        for (int row = 0; row < chosenboard.length; row++) {
            for (int column = 0; column < chosenboard[row].length; column++) {
                System.out.print(chosenboard[row][column]);
            }
        }
    }
}

第二次尝试:做“先声明,后初始化”:

public class Apples {
    static char[][] createBoard(int boardType) {
        char[][] board;
        switch (boardType) {
            case 1:
                board = new char[][]{
                        {' ', '1', '2', '3', '4', '5', '6', '7', '8', '9'},
                        {'1', '#', '#', '#', '-', '@', '-', '#', '#', '#'},
                        {'2', '#', '#', '-', '@', '@', '@', '-', '#', '#'},
                        {'3', '#', '-', '@', '@', '-', '@', '@', '-', '#'},
                        {'4', '-', '@', '@', '@', '@', '@', '@', '-'}};
                break;
            case 2:
                board = new char[][]{
                        {' ', '1', '2', '3', '4', '5'},
                        {'1', '-', '-', '-', '-', '-'},
                        {'2', '-', '@', '@', '@', '-'},
                        {'3', '-', '-', '@', '-', '-'},
                        {'4', '-', '-', '@', '-', '-'},
                        {'5', '-', '-', '-', '-', '-'}};
                //here I am declaring and assigning again
                break;

        }
        return board;
    }

    public static void main(String args[]) {
        System.out.println("This is your array :");
        char chosenboard[][] = createBoard(2);
        for (int row = 0; row < chosenboard.length; row++) {
            for (int column = 0; column < chosenboard[row].length; column++) {
                System.out.print(chosenboard[row][column]);
            }
        }
    }
}

之前的“重复局部变量”错误消失了,但我的 return 板行出现了新错误。它说“局部变量板可能尚未初始化”

您的代码无法编译,因为变量 board 已在 switch 语句之前定义,无法再次定义(在该范围内)。

static char[][] createBoard(int boardType) {
  char[][] board = new char[8][10];          // <= declared and assigned
  switch (boardType) {
    case 1:
      char board[][] = {{' ', /* ... */ }};  // <= declared and assigned again
      break;
    // ...

在这种情况下,您可以创建一个新的二维数组,然后将其分配给已声明的变量,如下所示:

char[][] board; // declaration
board = new char[][]{{' ', '1', '2', '3', '4', '5', '6', '7', '8', '9'}, {'1', '#', '#', '#', '-', '@', '-', '#', '#', '#'}, {'2', '#', '#', '-', '@', '@', '@', '-', '#', '#'}, {'3', '#', '-', '@', '@', '-', '@', '@', '-', '#'}, {'4', '-', '@', '@', '@', '@', '@', '@', '-'}};

仔细看看你的方法 createBoard 所做的事情,你可以进一步简化它并直接构造和 return 二维数组:

static char[][] createBoard(int boardType) {
    switch (boardType) {
        case 1:
            return new char[][]{{' ', '1', '2', '3', '4', '5', '6', '7', '8', '9'}, {'1', '#', '#', '#', '-', '@', '-', '#', '#', '#'}, {'2', '#', '#', '-', '@', '@', '@', '-', '#', '#'}, {'3', '#', '-', '@', '@', '-', '@', '@', '-', '#'}, {'4', '-', '@', '@', '@', '@', '@', '@', '-'}};
        case 2:
            return new char[][]{{' ', '1', '2', '3', '4', '5'}, {'1', '-', '-', '-', '-', '-'}, {'2', '-', '@', '@', '@', '-'}, {'3', '-', '-', '@', '-', '-'}, {'4', '-', '-', '@', '-', '-'}, {'5', '-', '-', '-', '-', '-'}};
        default:
            return new char [8][10];
    }
}

解决您对添加了第二次尝试的问题的编辑:
该错误意味着您正在尝试 return board 但它可能尚未初始化。在您的情况下,如果输入不是 1 或 2,则不会分配给 board。您可以在 switch 语句中添加一个 default case 来解决这个问题。或者在声明变量的时候赋一个默认值。