java - 如何检查二维对象数组是否包含某个对象?(爪哇)
问题描述
public class Maze {
private static final int Max_Maze_Row=20;
private static final int Max_Maze_Column=50;
public static Entity[][] maze =new Entity[Max_Maze_Row][Max_Maze_Column];
public Maze(){
}
public static void create(String filename) throws FileNotFoundException{
Scanner fileinput=new Scanner(new FileInputStream(filename));
fileinput.useDelimiter("");
while(fileinput.hasNextLine()){
for(int row=0;row<Max_Maze_Row;row++){
String line_content=fileinput.nextLine();
for(int col=0;col<Max_Maze_Column;col++){
if(line_content.charAt(col)=='*'){
maze[row][col]=new Wall('*',row,col);
}
if(line_content.charAt(col)==' '){
maze[row][col]=new Space(' ',row,col);
}
}
}
}
}
public abstract class Entity {
protected char symbol;
protected int row;
protected int col;
Entity(char symbol, int row, int col){
this.symbol=symbol;
this.row=row;
this.col=col;
}
public abstract void create();
public char Entity_put(char newEntity, int newRow, int newCol){
char oldEntity=this.symbol;
this.symbol=newEntity;
this.row=newRow;
this.col=newCol;
System.out.println(oldEntity);
return oldEntity;
}
}
public class Wall extends Entity{
public Wall(char symbol,int row,int col){
super(symbol,row,col);
}
public void create(){
}
}
我还有一个继承自 Entity 超类的类 Space。它本质上是''。所以发生的事情是,程序从文本文件中读取,然后创建墙和空间实体,它们具有特定的行、列、字符值。这些实体存储在 Entity[][] 迷宫中。但是,如何引用这些对象?例如,我如何知道迷宫阵列中有多少墙壁对象?基本上,我正在尝试做的事情是:随机选择一个不是墙的实体(即空间实体)。做一点事。
解决方案
编辑:我认为您可以在类中拥有另一个抽象函数performAction
,并Entity
在每个子类中覆盖此方法,即在这种情况下。当您稍后遍历数组时,您可以这样做Wall
Space
Entity entity = maze[row][col];
entity.performAction();
performAction
Java 将确定在运行时使用哪个子类。
==================================================== ========================= 一种选择是将另外两个存储ArrayList
为字段。例如,
List<Entity> walls;
List<Entity> spaces;
在构造函数中初始化它们。
public Maze() {
this.walls = new ArrayList<Entity>();
this.spaces = new ArrayList<Entity>();
}
在 中最内层的循环中Maze.create()
,您可以使用这些列表来跟踪墙壁和空间。
for(int col = 0; col < Max_Maze_Column; col++){
if (line_content.charAt(col) == '*') {
maze[row][col] = new Wall('*', row, col);
this.walls.add(maze[row][col]);
}
if (line_content.charAt(col) == ' ') {
maze[row][col] = new Space(' ', row, col);
this.spaces.add(maze[row][col]);
}
}
您可以通过索引访问获得每一面墙和空间。对于大小,只需调用walls.size()
and spaces.size()
。对于随机访问,您可以使用
// int max = walls.size() or spaces.size()
Random seed = new Random();
// Generate a random integer from 0 to (max - 1)
int index = seed.nextInt(max);
第二个选项可能是在instanceof
稍后遍历数组时使用运算符。例如,
Entity entity = maze[row][col];
if (entity instanceof Wall) {
Wall wall = (Wall) entity;
// do something with wall
} else if (entity instanceof Space) {
Space space = (Space) entity;
// do something with space
}
推荐阅读
- video.js - 如何在 video.js 中删除画中画图标?
- aws-amplify - 如何使用 react-admin 和 aws-amplify 创建自定义登录页面(最好使用我们的自定义布局)?
- apache-kafka - 在并行处理消息的同时处理 kafka 偏移
- python - 无法使用 python 从 Kibana 读取聚合数据
- python - python - 如何在python中使用带有Path变量的svg.path绘制椭圆?
- python - 尝试在 Spyder 上安装 fastai,但不知道如何解决此错误
- java - 如何在 Junit 中模拟查询类?
- python - Discord.py 检查参数是否是某些值之间的数字
- sql-server - PRIMARY 文件组已满
- checkbox - Highcharts - 图例复选框状态未更改