尝试创建一个 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 来解决这个问题。或者在声明变量的时候赋一个默认值。
我正在编写一个显示二维数组的简单程序。用户将有 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 来解决这个问题。或者在声明变量的时候赋一个默认值。