遍历对象的变量 (java)

Iteratation through variables of an objects (java)

我有一个 class Room 具有以下构造函数:

public Room (int x, int y, int z, int Stockwerk) {      
    this.x = x;
    this.y = y;
    this.z = z;
    this.Stockwerk = Stockwerk;
}

另一个class我想用欧氏距离来计算两个房间的相似度。因此,我想 iterate 通过 object 房间比较房间 1 的第一个值 (x) 与房间 2 的第一个值 (x),第二个 (y) 与第二个 (y) 等在。 (下面的代码描述了我是如何尝试得到结果的)。是否有任何选项可以遍历对象室?

Iterator itrRoom1 = room1.iterator();
Iterator itrRoom2 = room2.iterator();

while (itrRoom1.hasNext()) {            
    while (itrRoom2.hasNext()) {
        int value1 = itrRoom1.next();
        int value2 = itrRoom2.next();
    }
    //this is the function how I get the similarity of two rooms (euclidean distance)
    squareSubtraction = squareSubtraction + Math.pow(Math.abs(value1 - value2)), 2); 
}

distance = Math.sqrt(squareSubtraction);    

你做的很复杂,Iterator不需要。

如果想得到欧氏距离,只需要解析这两个Room实例进行比较即可。我假设你的 Room class 有吸气剂。

您可以根据给定的 Room 的所有实例的循环,将以下方法与任意数量的参数一起使用。

public static void main(String[] args) {   
    Room room1 = new Room(10,12,2,0);
    Room room2 = new Room(4,8,2,0);
    Room room3 = new Room(7,5,2,0);
    Room room4 = new Room(10,2,2,0);

    double result = similarity(room1, room2, room3, room4);
}

public static double similarity(Room ... r) {
    double sum = 0;
    for (int i=0; i<r.length-1; i++) {
        double a = Math.pow(r[i].getX() - r[i+1].getX(), 2);
        double b = Math.pow(r[i].getY() - r[i+1].getY(), 2);
        sum += a + b;
    }
    return Math.sqrt(sum);
}

这是给你的结果:

9.38083151964686

您不能像那样迭代 字段 。您可以使用反射来迭代字段,但不要这样做。

您只有 3 个值。就用它们吧。

long dx = room1.getX() - room2.getX();
long dy = room1.getY() - room2.getY();
long dz = room1.getZ() - room2.getZ();
double distance = Math.sqrt(dx * dx + dy * dy + dz * dz);

注意 dx 和其他的被声明为 long,所以 dx * dx 不会溢出,并且 dx * dxMath.pow(dx, 2) 快得多。

它实际上 代码 比您尝试做的还要少。