如何调用在另一个 class 中启动的二维数组?
How to call an 2D - Array which was iniciated in another class?
我对我的问题做了一个最小化的例子:
迷宫 class 使用方法 generateMaze() 创建一个 2D 布尔数组(mazeArray 的内容在本例中无关紧要)。 Walker 的主线程调用该方法,从而从 Maze-class.
创建这个 mazeArray
我不明白如何在 Walker.walk 中调用这个数组?恐怕我有知识差距
感谢您的每一个提示,非常感谢。
public final class Maze{
public static boolean[][] generateMaze(int width, int height) {
boolean[][] mazeArray = new boolean[width][height];
for( int x = 0; x < width; x++ ) {
mazeArray[x][0] = true;
}
for( int y = 0; y < height; y++ ) {
mazeArray[0][y] = true;
}
return mazeArray;
}
}
public class Walker {
public static void main(String[] args) {
Maze mazeObj = new Maze();
boolean[][] maze = Maze.generateMaze(2,2);
}
public void walk(Maze maze) {
// Traverse Array
}
}
说明
这里有几个基本的 OOP 错误。
首先,当您的 generateMaze
class 是 static
和 [=67 时,为什么还要创建 Maze
class 的实例=] 迷宫作为 boolean[][]
而不是 Maze
的实例。您可能打算将数组作为 class 的字段而不是直接访问数组,而是通过迷宫实例。
接下来,walk
方法是 non-static 和 Walker
实例的一部分。因此,您需要创建该 class 的实例并在该实例上调用该方法。
迷宫生成
您可能打算这样做:
public final class Maze {
// Arrays as field of maze instances
private boolean[][] mazeArray;
// return maze instance instead of array
public static Maze generateMaze(int width, int height) {
// create maze instance
Maze maze = new Maze();
// manipulate array of that maze instance
maze.mazeArray = new boolean[width][height];
for (int x = 0; x < width; x++) {
maze.mazeArray[x][0] = true;
}
for (int y = 0; y < height; y++) {
maze.mazeArray[0][y] = true;
}
// return the maze, not its array
return maze;
}
}
像
这样的电话
Maze maze = Maze.generateMaze(2, 2);
构造函数
或者更好的是,使用构造函数:
public final class Maze {
private final boolean[][] mazeArray;
public Maze(int width, int height) {
mazeArray = new boolean[width][height];
for (int x = 0; x < width; x++) {
mazeArray[x][0] = true;
}
for (int y = 0; y < height; y++) {
mazeArray[0][y] = true;
}
}
}
然后在你的main
中这样称呼它:
Maze maze = new Maze(2, 2);
工厂
如果您确实需要,您仍然可以将其与工厂方法结合使用。但是创建逻辑仍然应该在(可能 private
)构造函数中:
public final class Maze {
private final boolean[][] mazeArray;
private Maze(int width, int height) {
mazeArray = new boolean[width][height];
for (int x = 0; x < width; x++) {
mazeArray[x][0] = true;
}
for (int y = 0; y < height; y++) {
mazeArray[0][y] = true;
}
}
public static Maze generate(int width, int height) {
return new Maze(width, height);
}
}
这样称呼它:
Maze maze = Maze.generate(2, 2);
沃克
现在,您需要 Walker
class 的一个实例并在其上调用该方法,为其提供您刚刚生成的迷宫:
Maze maze = new Maze(2, 2);
Walker walker = new Walker();
walker.walk(maze);
我对我的问题做了一个最小化的例子: 迷宫 class 使用方法 generateMaze() 创建一个 2D 布尔数组(mazeArray 的内容在本例中无关紧要)。 Walker 的主线程调用该方法,从而从 Maze-class.
创建这个 mazeArray我不明白如何在 Walker.walk 中调用这个数组?恐怕我有知识差距 感谢您的每一个提示,非常感谢。
public final class Maze{
public static boolean[][] generateMaze(int width, int height) {
boolean[][] mazeArray = new boolean[width][height];
for( int x = 0; x < width; x++ ) {
mazeArray[x][0] = true;
}
for( int y = 0; y < height; y++ ) {
mazeArray[0][y] = true;
}
return mazeArray;
}
}
public class Walker {
public static void main(String[] args) {
Maze mazeObj = new Maze();
boolean[][] maze = Maze.generateMaze(2,2);
}
public void walk(Maze maze) {
// Traverse Array
}
}
说明
这里有几个基本的 OOP 错误。
首先,当您的 generateMaze
class 是 static
和 [=67 时,为什么还要创建 Maze
class 的实例=] 迷宫作为 boolean[][]
而不是 Maze
的实例。您可能打算将数组作为 class 的字段而不是直接访问数组,而是通过迷宫实例。
接下来,walk
方法是 non-static 和 Walker
实例的一部分。因此,您需要创建该 class 的实例并在该实例上调用该方法。
迷宫生成
您可能打算这样做:
public final class Maze {
// Arrays as field of maze instances
private boolean[][] mazeArray;
// return maze instance instead of array
public static Maze generateMaze(int width, int height) {
// create maze instance
Maze maze = new Maze();
// manipulate array of that maze instance
maze.mazeArray = new boolean[width][height];
for (int x = 0; x < width; x++) {
maze.mazeArray[x][0] = true;
}
for (int y = 0; y < height; y++) {
maze.mazeArray[0][y] = true;
}
// return the maze, not its array
return maze;
}
}
像
这样的电话Maze maze = Maze.generateMaze(2, 2);
构造函数
或者更好的是,使用构造函数:
public final class Maze {
private final boolean[][] mazeArray;
public Maze(int width, int height) {
mazeArray = new boolean[width][height];
for (int x = 0; x < width; x++) {
mazeArray[x][0] = true;
}
for (int y = 0; y < height; y++) {
mazeArray[0][y] = true;
}
}
}
然后在你的main
中这样称呼它:
Maze maze = new Maze(2, 2);
工厂
如果您确实需要,您仍然可以将其与工厂方法结合使用。但是创建逻辑仍然应该在(可能 private
)构造函数中:
public final class Maze {
private final boolean[][] mazeArray;
private Maze(int width, int height) {
mazeArray = new boolean[width][height];
for (int x = 0; x < width; x++) {
mazeArray[x][0] = true;
}
for (int y = 0; y < height; y++) {
mazeArray[0][y] = true;
}
}
public static Maze generate(int width, int height) {
return new Maze(width, height);
}
}
这样称呼它:
Maze maze = Maze.generate(2, 2);
沃克
现在,您需要 Walker
class 的一个实例并在其上调用该方法,为其提供您刚刚生成的迷宫:
Maze maze = new Maze(2, 2);
Walker walker = new Walker();
walker.walk(maze);