没有打印两次?

时间:2014-06-06 19:59:53

标签: java io iterator hashmap println

我有以下程序,它可能比它需要的更复杂,但镜像Prolog程序。我得到了正确的输出

没有 X = kian 是 F = [大卫] C = kian 是 否

除了最后一个No,我知道它与if(pairs.getKey()==父亲条件和while循环(it.hasNext())有关我只是不知道为什么它打印出来没有两次,我该如何解决?是因为我两次调用pairs.getKey()==父亲?

import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;

public class family {

    public static void main(String [] args) {

        family obj = new family();
        obj.family();
    }

    public static int family(){

        String[] male = new String[100];
 String[] female = new String[100];

    male[0] = "david";
    male[1] = "kian";
    female[0] = "anna";
    female[1] = "sarah";

    List<String> father = new ArrayList<String>();
    father.add("david");
    List<String> mother = new ArrayList<String>();
    mother.add("sarah");

    parent.put(mother, "kian");
    parent.put(father, "kian");


    Iterator it = parent.entrySet().iterator();
    while(it.hasNext()){
        Map.Entry pairs = (Map.Entry)it.next();
        if(pairs.getKey() == father && pairs.getValue() == "sarah"){
            System.out.println("Yes");
        }else{
            if(pairs.getKey() == father){
                System.out.println("F = " + pairs.getKey() + "\n" + "C = " +
                pairs.getValue() + "\n" + "Yes");
                }

                System.out.println("No");
        }
        if(pairs.getKey() == mother){
            System.out.println("X = " +
            pairs.getValue() + "\n" + "Yes");
        }

        it.remove();
    }
    return 0;
        }
}

2 个答案:

答案 0 :(得分:1)

您没有显示您实例化parent地图的位置,或者您添加到其中的其他内容,但看起来您有一个额外的元素,其中一个键不是“母亲“或”父亲“。如果是这样的话,那么:

  • if(pairs.getKey() == father && pairs.getValue() == "sarah")条件将评估为false,然后,
  • 在您的else块中,if(pairs.getKey() == father)也会评估为false,
  • 但是System.out.println("No");行超出了该条件,因此无论第二个条件是如何计算的,任何第一个条件为false时都会打印“No”。

此外,正如评论中所述,您应该使用.equals()来比较字符串(if(pairs.getKey().equals(father)))而不是==

答案 1 :(得分:0)

if(pairs.getKey() == father){
                System.out.println("F = " + pairs.getKey() + "\n" + "C = " +
                pairs.getValue() + "\n" + "Yes");
                }

                System.out.println("No");

大括号之外的语句是你在上面的那个之前的第一个if语句为false时得到double的原因。