Нет Распечатано дважды?
У меня есть следующая программа, которая, вероятно, намного сложнее, чем нужно, но отражает программу Prolog. Я получаю правильный вывод, который
Нет X = Киан Да F = [Давид] C = Киан Да Нет
За исключением этого последнего "Нет", я знаю, что это связано с условием if (pair.getKey() == папа и цикл while(it.hasNext()). Я просто не знаю, почему он печатает No дважды, и как я могу это исправить? Это потому, что я дважды вызываю pair.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 ответа
Вы не показываете, где вы создаете parent
карта, или что еще вы добавили к ней, но может показаться, что у вас есть дополнительный элемент, тот, чей ключ не "мама" или "отец". Если это так, то:
if(pairs.getKey() == father && pairs.getValue() == "sarah")
условное будет оценивать как ложное, то- в вашем другом блоке,
if(pairs.getKey() == father)
будет также оценивать как ложное, - но
System.out.println("No");
строка находится за пределами этого условного выражения, поэтому "Нет" будет напечатано в любое время, когда первое условное выражение будет ложным, независимо от того, как оценивается второе условное выражение.
Кроме того, как было отмечено в комментариях, вы должны использовать .equals()
сравнить строки (if(pairs.getKey().equals(father))
) а не ==
if(pairs.getKey() == father){
System.out.println("F = " + pairs.getKey() + "\n" + "C = " +
pairs.getValue() + "\n" + "Yes");
}
System.out.println("No");
Выражение за пределами фигурных скобок является причиной того, что вы получаете двойное "нет", когда первое выражение if перед предыдущим ложно.