Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-将子类分配到超类二维数组中的问题_Java_Arrays_Multidimensional Array - Fatal编程技术网

Java-将子类分配到超类二维数组中的问题

Java-将子类分配到超类二维数组中的问题,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我正在创建一个带有显示系统的RPG,其组织方式是根据系统中的每个项目的x和y值,将其指定给二维数组中的一个点(位置[][])。我使用的类如下所示: 物品->实体->玩家 物品->实体->敌人 物品->固定->治疗者 我将实体存储在ArrayList(entities)中,并将统计数据存储在ArrayList(stationaries)中,以获得系统中内容的列表。我的问题是为治疗者对象设置位置值(例如,位置[2][2]),而为玩家设置该值不会引起任何问题。将位置[2][2]设置为实体有效,但将

我正在创建一个带有显示系统的RPG,其组织方式是根据系统中的每个项目的x和y值,将其指定给二维数组中的一个点(位置[][])。我使用的类如下所示:

  • 物品->实体->玩家
  • 物品->实体->敌人
  • 物品->固定->治疗者
我将实体存储在ArrayList(entities)中,并将统计数据存储在ArrayList(stationaries)中,以获得系统中内容的列表。我的问题是为治疗者对象设置位置值(例如,位置[2][2]),而为玩家设置该值不会引起任何问题。将位置[2][2]设置为实体有效,但将其设置为静止会引发ArrayStoreException

以下是相关代码:

  for(int i = 0; i < entities.size(); i++) {
    //System.out.println(i);
     //System.out.println(entities.get(i).getName());
     if (entities.get(i).getX() == 0 || entities.get(i).getY() == 0) {
        System.out.println("Error: " + entities.get(i).getName() + " does not have any coordinates.");
     }
     else {
        locations[entities.get(i).getX()][entities.get(i).getY()] = entities.get(i);  //Works fine
        //System.out.println(entities.get(i).getName() + " " + entities.get(i).getX() + " " + entities.get(i).getY());
     } 
  }
  for(int i = 0; i < stationaries.size(); i++) {
     //System.out.println(i);
     //System.out.println(stationaries.get(i).getName());
     if (stationaries.get(i).getX() == 0 || stationaries.get(i).getY() == 0) {
        System.out.println("Error: " + stationaries.get(i).getName() + " does not have any coordinates.");
     }
     else {
        //System.out.println(stationaries.get(i).getName() + " " + stationaries.get(i).getX() + " " + stationaries.get(i).getY());
        locations[stationaries.get(i).getX()][stationaries.get(i).getY()] = stationaries.get(i);  //Throws exception
     } 
  }
for(int i=0;i
如果你还需要了解这个问题,请告诉我。多谢各位

编辑:开始代码:

private int height;
   private int width;
   private Item[][] locations;
   private ArrayList<Entity> entities;
   private ArrayList<Stationary> stationaries;
   private Entity placeholder;

   public Map (int h, int w) {
      height = h;
      width = w;
      locations = new Entity[h+1][w+1]; //I just saw this, found it
      entities = new ArrayList<Entity>();
      stationaries = new ArrayList<Stationary>();
      placeholder = new Entity("%$()@&)(*#*@%()$&#()@DFHUVON$r93v80qmwdzl4t3");
      for (int i = 1; i < w + 1; i++) {
         Arrays.fill(locations[i], placeholder);
      }
      locations[0] = null;
   }
private int高度;
私有整数宽度;
私人物品[]位置;
私有ArrayList实体;
私人ArrayList车站;
私有实体占位符;
公共地图(内部h、内部w){
高度=h;
宽度=w;
locations=新实体[h+1][w+1];//我刚看到这个,找到了
实体=新的ArrayList();
stationaries=newarraylist();
占位符=新实体(“%$()@&”)(*#*@%()$&(@DFHUVON$r93v80qmwdzl4t3”);
对于(int i=1;i
根据定义,数组是相似元素的集合。这里,stationaries和entity是不同的元素,您试图将它们存储在location数组中,这就是为什么会抛出失败的

ArrayStoreException,以指示您试图将错误类型的对象存储到数组中。位置数组的类型应为项

请看
.

再看一眼之后,我发现我忘了在构造函数方法中将位置数组从一个实体切换到另一个项目(该程序以前的工作方式不同,从那时起我对其进行了更改)。谢谢大家的帮助。

您能提供一个列表吗?您是否已将位置声明为类型项??从我收集的信息来看,您似乎已经将其声明为类型实体。不过,它们据称都是项。如果位置数组接受项目,它应该同时接受这两个项目。我猜他现在更新了这个问题。如果它们都是项,那么这里的问题肯定是如何声明对象。locations数组应该有一个类型,它可以同时接受实体和stationaries,我将使用存储系统的声明进行更新