我有一个列表,其中创建了一定数量的“乌龟”。这只是一些代码,而不是全部。
int nrTurtles = Keyboard.nextInt("How many turtles to create: ");
w = new GraphicsWindow(500, 300);
for (int k = 1; k <= nrTurtles; k++) {
Turtle t = new Turtle(w, 50, 50 + 10*k);
turtles.add(t);
}
每只乌龟都有一个我可以得到的协调值(例子):
turtles.get(0).getX() //this gets turtle nr 1 position
现在我如何以聪明的方式检查两只或更多只海龟,具体取决于列表中的数量具有相同的协调值( a修正值450 )?
和如果两个或更多具有相同的值(450),我想用 system.out.print 写“turtle1和turtle2就是那个”,如果碰巧turtle1和turtle2具有相同的值。
如果只有一只乌龟的值为(450)且没有其他,我只想写那只乌龟,例如。 “turtle1是唯一一个”。
答案 0 :(得分:1)
我会创建一个像这样的结构(伪代码):
HashTable{
450 => Array{ 1, 5 },
300 => Array{ 2 },
150 => Array{ 3, 4, 6 }
}
其中键是协调值,值是包含它的乌龟数组。
填写结构:
for each turtle:
get coord value
do we have it as a key yet?
no: create coord.value => empty array
insert turtle id into coord.value array
将其打印出来只需要迭代它。
答案 1 :(得分:1)
您可以使用Map<Integer, Set<Turtle>>
:
,键是X坐标。看看如何使用HashMaps:
基本上,循环遍历所有海龟并将其添加到地图中。类似的东西:
Map<Integer, Set<Turtle>> map = new HashMap<Integer, Set<Turtle>>();
for(Turtle t: turtles) {
Set<Turtle> set = m.get(t.getX());
if(set == null) {
s = new HashSet<Turtle>();
map.put(t.getX(), set);
}
map.put(t.getX(), set);
}
然后你只需浏览元素,看看是否还有一个元素:
for(Map.Entry<Integer, Set<Turtle>> e: map.entrySet()) {
Set<Turtle> set = e.getValue();
if(set.size() > 1) {
System.out.println("These turtles have the same X coordinate:");
for(Turtle t: set) {
System.out.println(t);
}
}
}
答案 2 :(得分:0)
最简单的方法是迭代列表并比较相关值,如果匹配则将匹配的海龟添加到结果列表中。
除非对海龟列表进行排序,否则你几乎只能将迭代作为搜索列表的技术。
第二次编辑:
ArrayList<Turtle> results = new ArrayList<Turtle>();
for (int i = 0; i < nrTurtles; i++) {
if (turtles.get(i).getX() == 450) {
results.add(turtles.get(i));
}
}
if (results.size() == 0) {
// No turtles are at 450
} else if (results.size() == 1) {
// Turtle is alone at 450
} else {
// Turtles are all at 450
}