Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java-检查列表中的相同值_Java_List - Fatal编程技术网

java-检查列表中的相同值

java-检查列表中的相同值,java,list,Java,List,我有一个列表,上面有很多海龟。这只是部分代码,不是全部 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); }

我有一个列表,上面有很多海龟。这只是部分代码,不是全部

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);
}
现在,我如何通过智能方式根据列表中的海龟数量检查两个或多个海龟是否具有相同的协调值固定值450

如果两个或两个以上具有相同的值(450),我想用system.out.打印“turtle1和turtle2是一个”,如果turtle1和turtle2恰好具有相同的值


如果只有一只海龟的值为(450),而没有其他海龟
,我只想写那只海龟,例如“只有海龟一只”

最简单的方法是遍历列表并比较相关值,如果它们匹配,则将匹配的海龟添加到结果列表中

除非对海龟列表进行了排序,否则您几乎只能使用迭代作为搜索列表的技术

第二次编辑:

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
}
ArrayList结果=新建ArrayList();
对于(int i=0;i
我会创建这样的结构(伪代码):

其中,关键是协调值,该值是一个具有协调值的海龟数组

填充结构:

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
打印出来只需对其进行迭代。

您可以使用
Map

关键点是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);
}
Map Map=newhashmap();
用于(海龟t:海龟){
Set=m.get(t.getX());
if(set==null){
s=新的HashSet();
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);
       }
   }
}
for(Map.Entry e:Map.entrySet()){
Set=e.getValue();
如果(set.size()>1){
System.out.println(“这些海龟有相同的X坐标:”);
适用于(t:套){
系统输出打印ln(t);
}
}
}

您的
Turtle
类是否实现了
equals()
方法?您是否可以对它们进行子类化/编辑代码并添加equals方法?是的,看起来不错,但只有一个问题。如果两个海龟的位置是300,那么代码将检查300的海龟是否相等。我只想测试值是否为450。希望你明白我的意思。这是O(n^2)吗?此外,这对3只或更多的海龟“在一起”也不起作用。我编辑了答案,以显示我认为你在寻找什么。如果这是家庭作业的话,你应该先自己好好尝试一下@是的,是O(n^2)。我同意哈希表是非常有用的,但看起来他不是在追求这种东西。啊,这正是我想要的。非常感谢你!是的,这是一个家庭作业,我会看看你的例子并学习。当我编写我不喜欢复制和粘贴的代码时,我想理解;)(如果您只需要coord.value为450的海龟,只需添加一个复选框“get coord value,if not 450,continue”)
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);
       }
   }
}