【发布时间】:2013-09-19 15:54:57
【问题描述】:
我有这个火星课程:
public abstract class Martian implements Cloneable {
int id;
public Martian(int id) {
this.id = id;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
public int getId() {
return id;
}
public boolean equals(Object o){
if( o != null);
return this.getId() == ((Martian)o).getId();
}
public abstract void speak();
public String toString(){
return "Martian" + getId();
}
}
还有一个 MartianManager 类:
public class MartianManager {
private ArrayList<Martian> martians;
private ArrayList<Martian> teleporters;
public void addMartian(Martian m) {
martians.add(m);
if(m instanceof GreenMartian)
teleporters.add(m);
}
//public Object clone() {
public Martian getMartianClosestToID(int id) {
}
public void groupSpeak() {
for(Martian m : martians) {
m.speak();
}
}
public void groupTeleport(String dest) {
for (Martian m : martians){
if (m instanceof GreenMartian)
((GreenMartian) m).teleport(dest);
}
}
//public obliterateTeleporters()
//removeMartian(int id)
}
在MartianManager 类中,我有一个方法getMartianClosestToId(),它返回与输入ID 最接近的ID 火星人。我的问题基本上是在循环中使用的最简单的逻辑是什么,或者他们是一种更简单的方法,例如compareTo,我不知道比较是否可以在这种情况下工作。
【问题讨论】:
-
虽然很想帮你,但我强烈反对克隆火星人。
-
不要在 Java 中使用 clone() 方法。它已经过时了。它有很多缺陷。
-
@gparyani 它并没有过时。只是不建议使用它。
-
@RohitJain 看看 Java 1.2 时代的 this bug report。在里面,他们特别说它已经过时了。
-
你如何计算距离?有坐标吗?欧几里得距离还是曼哈顿距离?
标签: java loops arraylist compare