Java 带有<;ArrayList<;字符串>&燃气轮机;作为一种价值观,获得动物英雄

Java 带有<;ArrayList<;字符串>&燃气轮机;作为一种价值观,获得动物英雄,java,generics,arraylist,hashmap,Java,Generics,Arraylist,Hashmap,我有网络和最喜欢的动物,看起来是这样的: 我有一个函数public ArrayList findanimalHipster(HashMap网络, HashMap favoriteAnimals) 它返回了一个由一串人组成的数组列表,这些人都是时髦的动物,这意味着他们所有邻居的动物都必须不同于我的动物。例如,丹有鹌鹑,他的邻居利奥和罗娜,他们都有不同于丹的动物。因此,丹是一个时髦的动物。我需要归还所有的动物时髦者。这是我的实现,我得到了错误的输出,它打印出所有的人都是动物嬉皮士,这是错误的 Ma

我有
网络
最喜欢的动物
,看起来是这样的:

我有一个函数
public ArrayList findanimalHipster(HashMap网络,
HashMap favoriteAnimals)

它返回了一个由一串人组成的数组列表,这些人都是时髦的动物,这意味着他们所有邻居的动物都必须不同于我的动物。例如,丹有鹌鹑,他的邻居利奥和罗娜,他们都有不同于丹的动物。因此,丹是一个时髦的动物。我需要归还所有的动物时髦者。这是我的实现,我得到了错误的输出,它打印出所有的人都是动物嬉皮士,这是错误的

MainClass.java

import java.util.ArrayList;

public class MainClass {
    public static void main(String[] args)
    {

        NetWorkApp instance = new NetWorkApp();
        instance.CreateAnimals();
        instance.neighboursForPersons();
        ArrayList<String> animalHipsters = instance.findAnimalHipsters(instance.network, instance.favoriteAnimals);
        for(String st : animalHipsters)
            System.out.print(st + " ");
    }
}
    import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class NetWorkApp {

    public HashMap <String,String> favoriteAnimals;
    public HashMap<String,ArrayList<String>> network;

    public NetWorkApp()
    {
        this.favoriteAnimals = new HashMap <String,String>();
        network = new HashMap<String,ArrayList<String>>();
    }

    public void CreateAnimals()
    {
        /*Adding elements to favoriteAnimals*/
        favoriteAnimals.put("Dan", "Quakka");
        favoriteAnimals.put("Ella", "Quakka");
        favoriteAnimals.put("Rona", "Dog");
        favoriteAnimals.put("Lior", "Cat");
        favoriteAnimals.put("David", "Dog");
        favoriteAnimals.put("Dor", "Dog");
        favoriteAnimals.put("Rina", "Quakka");
        favoriteAnimals.put("Gil", "Dog");
    }

    public void neighboursForPersons(){


        /*Creating neighbours for every person*/
        ArrayList<String> Dan = new ArrayList<String>();
        Dan.add("Rona");
        Dan.add("Lior");

        ArrayList<String> Ella = new ArrayList<String>();
        Ella.add("Rona");
        Ella.add("Dor");

        ArrayList<String> Rona = new ArrayList<String>();
        Rona.add("Dan");
        Rona.add("Ella");
        Rona.add("Lior");
        Rona.add("Dor");
        Rona.add("Rina");

        ArrayList<String> Lior = new ArrayList<String>();
        Lior.add("Dan");
        Lior.add("Rona");
        Lior.add("Dor");
        Lior.add("Gil");
        Lior.add("Rina");
        Lior.add("David");

        ArrayList<String> David = new ArrayList<String>();
        David.add("Lior");
        David.add("Gil");
        David.add("Rina");

        ArrayList<String> Dor = new ArrayList<String>();
        Dor.add("Ella");
        Dor.add("Rona");
        Dor.add("Rina");

        ArrayList<String> Rina = new ArrayList<String>();
        Rina.add("Dor");
        Rina.add("Rona");
        Rina.add("Lior");
        Rina.add("David");
        Rina.add("Gil");

        ArrayList<String> Gil = new ArrayList<String>();
        Gil.add("Lior");
        Gil.add("David");
        Gil.add("Rina");

        network.put("Dan", Dan);
        network.put("Ella", Ella);
        network.put("Rona", Rona);
        network.put("Lior", Lior);
        network.put("David", David);
        network.put("Dor", Dor);
        network.put("Rina", Rina);
        network.put("Gil", Gil);

    }

    public ArrayList<String> findAnimalHipsters(HashMap<String,ArrayList<String>> network,
            HashMap <String,String> favoriteAnimals)
            {
        boolean found = false;
        ArrayList<String> animalHipsters = new ArrayList<String>();
                // Display elements
                for (Map.Entry<String, String> entry : favoriteAnimals.entrySet()) {
                    String key = entry.getKey();

                    for(Map.Entry<String, ArrayList<String>> entrySecond : network.entrySet()){
                        if(key.equals(entrySecond.getKey())){
                            for(String st : entrySecond.getValue())
                            {
                                if((entry.getValue()).equals(st)) //Match
                                    found = true;
                            }
                            if(!found)
                                animalHipsters.add(key);
                            else 
                                found = !found;
                        }
                    }
                }
                return animalHipsters;  
            }
}
import java.util.ArrayList;
公共类主类{
公共静态void main(字符串[]args)
{
NetWorkApp实例=新建NetWorkApp();
CreateAnimals();
例如,neighboursForPersons();
ArrayList animalHipsters=instance.findAnimalHipsters(instance.network,instance.favoriteAnimals);
适用于(字符串st:动物嬉皮士)
系统输出打印(st+“”);
}
}
NetWorkApp.java

import java.util.ArrayList;

public class MainClass {
    public static void main(String[] args)
    {

        NetWorkApp instance = new NetWorkApp();
        instance.CreateAnimals();
        instance.neighboursForPersons();
        ArrayList<String> animalHipsters = instance.findAnimalHipsters(instance.network, instance.favoriteAnimals);
        for(String st : animalHipsters)
            System.out.print(st + " ");
    }
}
    import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class NetWorkApp {

    public HashMap <String,String> favoriteAnimals;
    public HashMap<String,ArrayList<String>> network;

    public NetWorkApp()
    {
        this.favoriteAnimals = new HashMap <String,String>();
        network = new HashMap<String,ArrayList<String>>();
    }

    public void CreateAnimals()
    {
        /*Adding elements to favoriteAnimals*/
        favoriteAnimals.put("Dan", "Quakka");
        favoriteAnimals.put("Ella", "Quakka");
        favoriteAnimals.put("Rona", "Dog");
        favoriteAnimals.put("Lior", "Cat");
        favoriteAnimals.put("David", "Dog");
        favoriteAnimals.put("Dor", "Dog");
        favoriteAnimals.put("Rina", "Quakka");
        favoriteAnimals.put("Gil", "Dog");
    }

    public void neighboursForPersons(){


        /*Creating neighbours for every person*/
        ArrayList<String> Dan = new ArrayList<String>();
        Dan.add("Rona");
        Dan.add("Lior");

        ArrayList<String> Ella = new ArrayList<String>();
        Ella.add("Rona");
        Ella.add("Dor");

        ArrayList<String> Rona = new ArrayList<String>();
        Rona.add("Dan");
        Rona.add("Ella");
        Rona.add("Lior");
        Rona.add("Dor");
        Rona.add("Rina");

        ArrayList<String> Lior = new ArrayList<String>();
        Lior.add("Dan");
        Lior.add("Rona");
        Lior.add("Dor");
        Lior.add("Gil");
        Lior.add("Rina");
        Lior.add("David");

        ArrayList<String> David = new ArrayList<String>();
        David.add("Lior");
        David.add("Gil");
        David.add("Rina");

        ArrayList<String> Dor = new ArrayList<String>();
        Dor.add("Ella");
        Dor.add("Rona");
        Dor.add("Rina");

        ArrayList<String> Rina = new ArrayList<String>();
        Rina.add("Dor");
        Rina.add("Rona");
        Rina.add("Lior");
        Rina.add("David");
        Rina.add("Gil");

        ArrayList<String> Gil = new ArrayList<String>();
        Gil.add("Lior");
        Gil.add("David");
        Gil.add("Rina");

        network.put("Dan", Dan);
        network.put("Ella", Ella);
        network.put("Rona", Rona);
        network.put("Lior", Lior);
        network.put("David", David);
        network.put("Dor", Dor);
        network.put("Rina", Rina);
        network.put("Gil", Gil);

    }

    public ArrayList<String> findAnimalHipsters(HashMap<String,ArrayList<String>> network,
            HashMap <String,String> favoriteAnimals)
            {
        boolean found = false;
        ArrayList<String> animalHipsters = new ArrayList<String>();
                // Display elements
                for (Map.Entry<String, String> entry : favoriteAnimals.entrySet()) {
                    String key = entry.getKey();

                    for(Map.Entry<String, ArrayList<String>> entrySecond : network.entrySet()){
                        if(key.equals(entrySecond.getKey())){
                            for(String st : entrySecond.getValue())
                            {
                                if((entry.getValue()).equals(st)) //Match
                                    found = true;
                            }
                            if(!found)
                                animalHipsters.add(key);
                            else 
                                found = !found;
                        }
                    }
                }
                return animalHipsters;  
            }
}
import java.util.ArrayList;
导入java.util.HashMap;
导入java.util.Map;
公共类NetWorkApp{
公共哈希图偏爱动物;
公共HashMap网络;
公共网络应用程序()
{
this.favoriteAnimals=newHashMap();
network=newhashmap();
}
公共动物
{
/*向favoriteAnimals添加元素*/
最喜欢的动物;
最喜欢的动物;
喜欢动物。把(“罗娜”,“狗”);
喜欢动物。把(“狮子”、“猫”);
最喜欢的动物;
喜欢动物。把(“Dor”、“Dog”);
喜欢动物。把(“里娜”,“嘎嘎”);
喜欢动物。把(“吉尔”,“狗”);
}
公共场所{
/*为每个人创造邻居*/
ArrayList Dan=新的ArrayList();
Dan.添加(“Rona”);
Dan.添加(“Lior”);
ArrayList=新的ArrayList();
添加(“Rona”);
添加(“Dor”);
ArrayList Rona=新的ArrayList();
Rona.添加(“Dan”);
罗娜。加上(“埃拉”);
Rona.添加(“Lior”);
Rona.添加(“Dor”);
Rona.添加(“Rina”);
ArrayList Lior=新的ArrayList();
Lior.添加(“Dan”);
Lior.添加(“Rona”);
Lior.添加(“Dor”);
Lior.添加(“Gil”);
Lior.添加(“Rina”);
Lior.添加(“大卫”);
ArrayList David=新的ArrayList();
David.添加(“Lior”);
David.添加(“Gil”);
David.添加(“Rina”);
ArrayList Dor=新的ArrayList();
Dor.添加(“Ella”);
Dor.添加(“Rona”);
Dor.添加(“Rina”);
ArrayList Rina=新的ArrayList();
Rina.添加(“Dor”);
Rina.添加(“Rona”);
Rina.添加(“Lior”);
Rina.添加(“David”);
Rina.添加(“Gil”);
ArrayList Gil=新的ArrayList();
Gil.添加(“Lior”);
Gil.添加(“大卫”);
Gil.添加(“Rina”);
网络。put(“Dan”,Dan);
网络.put(“Ella”,Ella);
网络。放置(“Rona”,Rona);
网络。put(“Lior”,Lior);
“大卫”,大卫;
网络。put(“Dor”,Dor);
网络。put(“Rina”,Rina);
网络。put(“Gil”,Gil);
}
公共ArrayList FindaniMalHipster(HashMap网络、,
HashMap(动物)
{
布尔值=false;
ArrayList AnimalHipster=新的ArrayList();
//显示元素
for(Map.Entry:favoriteAnimals.entrySet()){
String key=entry.getKey();
对于(Map.Entry entrySecond:network.entrySet()){
if(key.equals(entrySecond.getKey())){
for(字符串st:entrySecond.getValue())
{
如果((entry.getValue()).equals(st))//匹配
发现=真;
}
如果(!找到)
添加(键);
其他的
找到=!找到;
}
}
}
返回动物飞船;
}
}

编辑:我想我不是在用动物来检查动物,而是在检查邻居的名字。试图解决这个问题。

部分问题在于:

for(String st : entrySecond.getValue())
{
     if((entry.getValue()).equals(st)) //Match
         found = true;
}
您忽略了前面邻居的值,因此基本上,您只在添加的最后一个邻居与您最喜欢的动物相同时进行有效比较

集合接口(ArrayList实现)的一部分是一个方法,该方法将告诉您集合是否包含该对象

此外,对于这样的嵌套循环,有时需要至少在初始阶段将键和值提取到更有意义的名称中—这将有助于确保比较正确的值。或者在每个点添加注释以提供帮助

编辑 正如您所提到的,您正在将动物与人的名字进行比较,因此需要获取第二个输入值(邻居的名字),然后获取他们最喜欢的动物。此外,使用键集可能会更好。试试这个:

// Each person in the network
for(Set<String> name : network.keySet()) 
{
      boolean isHipster = false;
      // Get their neighbours
      ArrayList<String> neighbours = network.get(name);
      // Get their favourite animal
      String favAnimal = favouriteAnimals.get(name);
      for(String st : neighbours ) //Neighbours loop
      {
          // Get their neighbours favourite animal
          String neighboursFavAnimal = favouriteAnimals.get(st);
          // Compare
          if(favAnimal.equals(neighboursFavAnimal))
          {
              //is a hipster
              isHipster = true;
              //Stop comparing as doesnt matter anymore
              break;
          }   
      }
      // If isHipster is still false then add the name.
      if(!isHipster)
          animalHispters.add(name)
 }
//网络中的每个人
for(集合名称:network.keySet())
{
布尔值isHipster=false;
//找他们的邻居
ArrayList邻居=network.get(name);
//得到他们最喜欢的动物
字符串favAnimal=favoriteAnimals.get(名称);
for(String st:neights)//neights循环
{
//让他们的邻居得到他们最喜欢的动物
String neighborsfavanimal=favoriteAnimal.get(st);
//比较
if(favAnimal.equals(neighborsfavanimal))
String animal = favoriteAnimals.get(person);
if (neighbours.stream().map(favoriteAnimals::get).noneMatch(animal::equals))
animalHipsters.add(person);