Нет Распечатано дважды?

У меня есть следующая программа, которая, вероятно, намного сложнее, чем нужно, но отражает программу 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 перед предыдущим ложно.

Другие вопросы по тегам