有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将arraylist中的值放入抽象类中进行比较

我有一门课叫“模特”

class Model {
  private ArrayList<Picture> pictures;
  public ArrayList<Picture> getPictureList() { return pictures; }
}

(我有实现所有这些的方法,这只是一个例子)

那我有

abstract class Picture{
  public boolean touches(Picture p) {}
}

我想让这个函数从about arraylist中提取值,与参数“p”进行比较,看看这两张图片是否相互接触。 我想用这样的东西

public boolean touches(Picture p) {
     for (Picture picture : pictures) {
         //compare values
     }
}

我怎样才能将值从类“模型”中拉入抽象类图片中呢


共 (2) 个答案

  1. # 1 楼答案

    您已经有了getPictureList()方法,因此可以使用它:

    public boolean touches(Picture p) {
         for (Picture picture : modelInstance.getPictureList()) {
             //compare values
         }
    }
    

    然而,更好的实现是删除getPictureList(),并用Picture getPicture(int i)int getNumberOfPictures()替换它。这样,模型类的用户将无法访问内部ArrayList(这将允许他们直接操作它)

    那么您的代码将如下所示:

    public boolean touches(Picture p) {
         for (int i = 0; i < modelInstance.getNumberOfPictures(); i++) {
             Picture picture = modelInstance.getPicture(i);
             //compare values
         }
    }
    

    另一种方法是实现迭代器,即让Model实现Iterable<Picture>接口

    那么您的代码将如下所示:

    public boolean touches(Picture p) {
         for (Picture picture : modelInstance) {
             //compare values
         }
    }
    
  2. # 2 楼答案

    所以我想回答我自己的问题,我不确定这是否会帮助任何人,但我想我无论如何都会把它贴在这里。基本上,我对这个问题的理解是错误的。Model类创建类型为Picture的ArrayList。因此,Picture类变量中已经存在这些值。我试图做的是在不必要的时候将整个ArrayList发送到类中。我需要做的是像这样从Model类调用overlaps()方法

    for (Picture p1 : pictures) {
        for (Picture p2 : pictures) {
         p1.overlaps(p2);
         }
    }
    

    这样做的目的是让每个图片对照ArrayList中的每个其他图片检查自己,并确定它们是否重叠。(假设正确实现了重叠功能) 这在Java中是一个非常重要的概念,幸运的是我有一个朋友可以解释