java - 从使用类名作为输入的方法返回二维数组
问题描述
我收到错误消息“类型不匹配无法从 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()
从一个单元格到另一个单元格的内容或其他内容。但是请记住,您的“客户班级”不知道班级内部的外观,因此您不能只存储 a GameObject
as 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();
}
}
推荐阅读
- python - 如何在控制台屏幕上不显示打印功能的情况下将返回键存储到变量?
- python-3.x - LazyCorpusLoader 类在 nltk 包中是如何工作的?
- ios - 如何快速动画边框闪烁?
- python - 加载栏 - 类型错误:只能将 str(不是“int”)连接到 str
- r - 有没有办法*不*关联矩阵中的所有值(并获得 r 值和带校正的 p 值)?
- go - 未缓冲通道上的死锁
- css - 验证 v-menu 如何设置边框菜单的响应式和固定宽度
- sql - SQL如果B表中有记录,则获取左表中值的平均值
- r - 考虑分组变量 R 的 N 部分中的分区数据
- anaconda - anaconda 提示符的命令编辑器