Написать метод, который проверяет состав массива из чисел 1 и 4

Помогите пожалуйста, старшие братья программисты. Не один час ломаю голову, перепробовал все, совсем запутался.

Написать метод, который проверяет состав массива из чисел 1 и 4. Если в нем нет хоть одной четверки или единицы, то метод вернет false; Если содержится число отличное от 1 и 4, то метод вернет false

Примеры:

[ 1 1 1 4 4 1 4 4 ] -> true
[ 1 1 1 1 1 1 ] -> false
[ 4 4 4 4 ] -> false
[ 1 4 4 1 1 4 3 ] -> false

Вот мой код, добиться выполнения все условий задачи никак не получается:

public class CompositionArray {
    public static void main(String[] args) {
        int[] array = {1, 4, 1, 1};
        int value1 = 1;
        int value2 = 4;
        System.out.println("Array: " + Arrays.toString(array));
        checkArray(array, value1, value2);
    }

    public static void checkArray(int[] array, int value1, int value2) {
        boolean test1 = false;
        boolean test2 = false;
        for (int element : array) {
            if (element == value1)
                test1 = true;
            else if(element == value1)
                test2 = true;
        }
        System.out.println("Is " + value1 + " and " + value2 + " present in the array: " + (test1 && test2));
    }
}


Ответы (5 шт):

Автор решения: lampa

Бгг

public class Application {
    public static boolean checkArray(int[] array, int value1, int value2) {
        int len = array.length;

        String result = "";

        for (int j : array) {
            result += " " + j;
        }

        String replace = result.replace(" " + value1, "");
        String replace2 = replace.replace(" " + value2, "");

        return replace.length() != array.length * 2 && replace2.length() != replace.length() * 2 && replace2.isEmpty();
    }


    public static void main(String[] args) {
        System.out.println(checkArray(new int[] {1, 1, 4, 1}, 1, 4)); // true
        System.out.println(checkArray(new int[] {1, 1, 1, 1}, 1, 4)); // false
        System.out.println(checkArray(new int[] {4, 4, 4, 4}, 1, 4)); // false
        System.out.println(checkArray(new int[] {1, 2, 3, 4}, 1, 4)); // false
    }
}
→ Ссылка
Автор решения: DeMmAge

Без понятия в чем проблема, все работает нормально.

public static void main(String[] args) {
        int[] array = {1, 4, 1, 1};
        int value1 = 1;
        int value2 = 4;
        System.out.println("Array: " + Arrays.toString(array));
        boolean result = checkArray(array, value1, value2);
        System.out.println("Is " + value1 + " and " + value2 + " present in the array: " + result);
    }

    public static boolean checkArray(int[] array, int first, int second) {
        boolean containsFirst = false;
        boolean containsSecond = false;
        for (int element : array) {
            if (element == first) {
                containsFirst = true;
            } else if (element == second) {
                containsSecond = true;
            } else {
                return false;
            }
        }
        return containsFirst && containsSecond;
    }

введите сюда описание изображения

→ Ссылка
Автор решения: Александр Киласония
public class CompositionArray {
    public static void main(String[] args) {
        int[] array = {1, 1, 1, 1};
        int value1 = 1;
        int value2 = 4;
        System.out.println("Array: " + Arrays.toString(array));
        boolean result = checkArray(array, value1, value2);
        System.out.println("Is " + value1 + " and " + value2 + " present in the array: " + result);
    }

    public static boolean checkArray(int[] array, int first, int second) {
        boolean containsFirst = false;
        boolean containsSecond = false;
        for (int element : array) {
            if (element == first) {
                containsFirst = true;
            } else if (element == second) {
                containsSecond = true;
            }
        }
        return containsFirst && containsSecond;
    }
}
→ Ссылка
Автор решения: gil9red

Нужно просто перебрать через if/else if/else варианты:

    public static boolean checkArray(int[] array, int value1, int value2) {
        boolean containsValue1 = false;
        boolean containsValue2 = false;

        for (int value : array) {
            if (value == value1)
                containsValue1 = true;
            else if (value == value2)
                containsValue2 = true;
            else
                return false;
        }

        return containsValue1 && containsValue2;
    }

Тест

    public static void main(String[] args) throws Exception {
        {
            int[] array = {1, 4, 1, 1};
            System.out.println("Array: " + Arrays.toString(array));
            System.out.println("Result: " + checkArray(array, 1, 4));
        }

        {
            int[] array = {1, 1, 1, 1};
            System.out.println("Array: " + Arrays.toString(array));
            System.out.println("Result: " + checkArray(array, 1, 4));
        }

        {
            int[] array = {4, 4, 4};
            System.out.println("Array: " + Arrays.toString(array));
            System.out.println("Result: " + checkArray(array, 1, 4));
        }

        {
            int[] array = {1, 4, 1, 4, 777};
            System.out.println("Array: " + Arrays.toString(array));
            System.out.println("Result: " + checkArray(array, 1, 4));
        }
    }

Результат:

Array: [1, 4, 1, 1]
Result: true
Array: [1, 1, 1, 1]
Result: false
Array: [4, 4, 4]
Result: false
Array: [1, 4, 1, 4, 777]
Result: false
→ Ссылка
Автор решения: DeMmAge

Накодировал при помощи стимов, выглядит не оч элегантно. Зато работает.

public static boolean checkArray(int[] array, int first, int second) {
        boolean containsWrong = IntStream.of(array).filter(i -> i != first).filter(i -> i != second).count() != 0;
        boolean containsFirst = IntStream.of(array).filter(i -> i == first).count() != 0;
        boolean containsSecond = IntStream.of(array).filter(i -> i == second).count() != 0;
        return !containsWrong && containsFirst && containsSecond;
    }
→ Ссылка