Dwie liczby, które nie występują w tablicy

0

Robię zadania z Javy i zawiesiłem się na tym. Napisz kod który odczytuje tablicę liczb całkowitych i dwóch liczb n i m. Program musi sprawdzić, czy n i m nie występują (w dowolnej kolejności) w tablicy.
nie przechodzi testu z:
10
3 4 5 6 3 4 6 4 4 8
5 8
false

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int arraysize = scan.nextInt();
        int[] array = new int[arraysize];

        for (int i = 0; i < arraysize; i++) {
            array[i] = scan.nextInt();
        }
        int n = scan.nextInt();
        int m = scan.nextInt();

        boolean nbool = false;
        boolean mbool = false;

        for (int i = 0; i < arraysize; i++) {
            if (array[i] == n) {
                nbool = true;
            }
            if (array[i] == m) {
                mbool = true;
            }
        }
        if ((nbool == true && mbool == true || (nbool == false && mbool == false))) {
            System.out.println(false);
        } else {
            System.out.println(true);
        }
    }
}
2
p_agon napisał(a):
        if ((nbool == true && mbool == true || (nbool == false && mbool == false))) {
            System.out.println(false);
        } else {
            System.out.println(true);
        }

Co to za potworek?

private static boolean doTheNumbersExistInArray(int[] array, int firstNumber, int secondNumber) {
        List<Integer> filteredList = Arrays.stream(array)
                .filter(number -> number != firstNumber)
                .filter(number -> number != secondNumber)
                .boxed()
                .collect(Collectors.toList());

        return filteredList.size() != array.length;
    }

a potem w mainie:

System.out.println(doTheNumbersExistInArray(array, n, m));

Jeśli w zadaniu jest napisane, że zawsze sprawdzasz 2 liczby to jest ok. Jeśli może być ich mniej/więcej to zmień metodę aby sprawdzała tylko dla 1 liczby i wywołuj dla każdej pojedynczo.

0

Ten if na końcu to nie powinien po prostu sprawdzać czy obie flagi są true?

2

Jak nie chcesz Set (HashSet) i contains(e), to od razu w tablicy udekorowanej do listy / metoda indexOf(e)
Dostajesz >=0 to element e jest w tablicy

        Integer[] array = new Integer[]{1, 2, 3, 4, 5};
        List<Integer> list = Arrays.asList(array);
        int indexOf4 = list.indexOf(4); // 3
        int indexOf15 = list.indexOf(15); // -1

Jak robisz zadania testowe, które są sprawdzane on-line i masz mało czasu, to użycie natywnych metod daje ci pewność, że Oracle zoptymalizowało kod lepiej niż ty (i ja) byłbyś w stanie to zrobić, i bez testowania zakładasz, że te natywne "CZARNE (lives matter) skrzynki" działają na pewno poprawnie.

I jeszcze jedno, czy robisz zadanie w Java czy w JavaScript, to pewne rozwiązania są takie same (w JS nie musiałbyś dekorować do List). Raz załapiesz o co chodzi i robisz bez względu na język = język bazujący na C - nie bić, dla mnie JS i C są podobne (podobne, bo bo musiałem przedzierać się przez https://www.amazon.com/Structure-Interpretation-Computer-Programs-Engineering-dp-0262510871/dp/0262510871 )

1 użytkowników online, w tym zalogowanych: 0, gości: 1