Написать метод, который проверяет состав массива из чисел 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;
}
