我有以下程序,它可能比它需要的更复杂,但镜像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;
}
}
答案 0 :(得分:1)
您没有显示您实例化parent
地图的位置,或者您添加到其中的其他内容,但看起来您有一个额外的元素,其中一个键不是“母亲“或”父亲“。如果是这样的话,那么:
if(pairs.getKey() == father && pairs.getValue() == "sarah")
条件将评估为false,然后,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的原因。