Java - 将子类分配到超类二维数组

时间:2017-03-26 16:42:57

标签: java arrays multidimensional-array

我正在创建一个带有显示系统的RPG,该系统的组织方式是将系统中的每个项目分配到二维数组(locations [] [])中基于其x和y值的点。我使用的课程是这样的:

  • 项目 - >实体 - >播放器
  • 项目 - >实体 - >敌人
  • 项目 - >固定 - >治疗者

我将实体存储在ArrayList(实体)中,并将数据存储在ArrayList中(文具),以获得系统中的内容列表。我的问题是将位置值(例如,位置[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
     } 
  }

如果您需要了解更多问题,请告知我们。谢谢。

编辑:开始代码:

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;
   }

3 个答案:

答案 0 :(得分:0)

根据定义,数组是类似元素的集合。这里的文具和实体是你试图存储在位置数组中的不同元素,这就是它失败的原因

答案 1 :(得分:0)

抛出ArrayStoreException以指示您正在尝试将错误类型的对象存储到数组中。位置数组的类型应为Item。

请看 https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayStoreException.html

答案 2 :(得分:0)

在第二次看之后,事实证明我忘记了在构造函数方法中将一个实体之间的位置数组切换(该程序之前的工作方式不同,我从此改变了它)。谢谢大家的帮助。