Porównywanie wartości trzech list

0

Dzień Dobry,
Chciałabym prosić Was o pomoc. Nie chodzi mi o zrobienie czegoś za mnie a raczej o podpowiedź w kwestii rozwiązania mojego problemu. Pewnie dla większości z Was zadanie wyda się co najmniej trywialne. Mam sobie 3 listy. Są to listy liczbowe typu integer. Załóżmy że wyglądają one tak:
Lista 1:
1
3
5
9

Lista 2:
3
7

Lista 3:
1
8
12

I teraz muszę porównać wartości na tych 3 listach i zwrócić wartość boolowską = true jeżeli znajdę taką liczbę która występuje na wszystkich 3 listach. W takiej sytuacji robię break'a i przerywam działanie pętli. Ja to sobie wyobrażam tak że robię dwie pętle, jedna wewnątrz drugiej, jedną iteruję po i, drugą po j i porównuję dwie listy. jeśli znajdę wartość które występuje na dwóch listach muszę sprawdzić czy jest ona również na 3 tylko co wtedy? Powinnam zrobić trzecią pętlę wewnątrz tej drugiej? Pogubiłam się. Na dwóch listach działa mi to super ale w trzecią mam problem. Pomożecie? :(

0

Skoro 2 listy porównujesz 2 pętlami to 3 listy porównasz za pomocą 3.
Pseudokod:

el1 : Lista1
   el2 : Lista2
      if(el1 == el2) {
         el3 : lista3 
            if(el1 == el3)
               // znalezione
      }
0

Ale w czym problem? Nie możesz umieścić trzeciej pętli wewnątrz ifa? Pokaż kod który masz

1

Troszke bardziej skomplikowane niz 3 petle ale pozwala sprawdzic to dla dowolnej ilosci list.

Interujesz pierwsza liste i sprawdzasz czy wartosc jest takze obecna we wszystkich innych listach (isValuePresentInAllLists), jesli tak to return true.

import java.util.Arrays;
import java.util.List;

public class ListCheck {

    public static void main(String[] args) {
        List<Integer> list1 = Arrays.asList(1, 2, 3);
        List<Integer> list2 = Arrays.asList(1);
        List<Integer> list3 = Arrays.asList(2, 3);
        List<Integer> list4 = Arrays.asList(3);

        System.out.println(ListCheck.containsMutualValue(list1));
        System.out.println(ListCheck.containsMutualValue(list1, list2));
        System.out.println(ListCheck.containsMutualValue(list2, list3));
        System.out.println(ListCheck.containsMutualValue(list4, list3, list1));
        System.out.println(ListCheck.containsMutualValue(list1, list2, list3, list4));
    }

    @SafeVarargs
    public static boolean containsMutualValue(List<Integer> list, List<Integer>... lists) {
        for (Integer value : list) {
            if (isValuePresentInAllLists(value, lists)) {
                return true;
            }
        }

        return false;
    }

    @SafeVarargs
    private static boolean isValuePresentInAllLists(Integer value, List<Integer>... lists) {
        for (List<Integer> list : lists) {
            if (!list.contains(value)) {
                return false;
            }
        }

        return true;
    }
}

Tylko na 3 listy:

private static boolean containsMutualValue(List<Integer> list1, List<Integer> list2, List<Integer> list3) {
        for (Integer value : list1) {
            if (list2.contains(value) && list3.contains(value)) {
                return true;
            }
        }

        return false;
    }

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.