[英]Iteratation through variables of an objects (java)
我有一個帶有以下構造函數的類Room
:
public Room (int x, int y, int z, int Stockwerk) {
this.x = x;
this.y = y;
this.z = z;
this.Stockwerk = Stockwerk;
}
在另一個class
我想通過使用歐幾里德距離來計算兩個房間的相似度。 因此,我想通過object
室iterate
,將room1的第一個值(x)與room2的第一個值(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
課程有吸氣劑。
您可以使用以下方法,使用基於循環所有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 * dx
比Math.pow(dx, 2)
快得多。
它實際上甚至比您嘗試的代碼更少 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.