// Решение 5: continue
package ru.mami;
public final class NumberFinder {
public static void main(String[] args) {
int[] numbers = { -12, 33, -43, -47, 84, 90, 67 }; // исходный массив
int digitSought = 4; // искомая цифра
boolean digitFound = false; // true, если цифра уже найдена
// цикл, счетчик которого проходит по всем элементам массива
for (int numberCurrent : numbers) {
// если значение текущего элемента нечентое
if (numberCurrent % 2 != 0) {
// переход к следующей итерации цикла (с пропуском всех
// остальных действий, указанных в теле цикла)
continue;
}
// создание отдельной переменной для поиска цифр в числе.
// numberCurrent не может быть использован, так как значение
// переменной изменяется в процессе поиска
int dividend = Math.abs(numberCurrent);
// цикл выполняется до тех пор,
// пока не будут проверены все цифры текущего числа
while (dividend != 0) {
// получение самой правой цифры значения переменной
// dividend (остаток от деления на 10)
int remainder = dividend % 10;
// если полученная цифра является той, которую надо найти
if (remainder == digitSought) {
// сохранение информации о том, что цифра уже найдена
digitFound = true;
// вывод строки на экран
System.out.println("Цифра " + digitSought
+ " содержится в числе " + numberCurrent);
// преждевременный выход из цикла while независимо от
// условия (не проверяя оставшиеся цифры)
break;
}
// целочисленное деление на 10, чтобы при следующей итерации
// цикла while получить следующую цифру
dividend /= 10;
}
// если искомая цифра уже найдена
if (digitFound) {
// выйти из цикла for, не проверяя оставшиеся числа
break;
}
}
// если после прохода по всему массиву искомый элемент не был найден
if (!digitFound) {
// вывод на экран соответствующей информации
System.out.println(
"Соответствующий условию элемент массива найти не удалось");
}
}
}
// Решение 6: без комментариев
package ru.mami;
public final class NumberFinder {
public static void main(String[] args) {
int[] numbers = { -12, 33, -43, -47, 84, 90, 67 };
int digitSought = 4;
boolean digitFound = false;
for (int numberCurrent : numbers) {
if (numberCurrent % 2 != 0) {
continue;
}
int dividend = Math.abs(numberCurrent);
while (dividend != 0) {
int remainder = dividend % 10;
if (remainder == digitSought) {
digitFound = true;
System.out.println("Цифра " + digitSought
+ " содержится в числе " + numberCurrent);
break;
}
dividend /= 10;
}
if (digitFound) {
break;
}
}
if (!digitFound) {
System.out.println(
"Соответствующий условию элемент массива найти не удалось");
}
}
}
Решение 7: Java 8 Stream api
package ru.mami;
import java.util.Arrays;
import java.util.OptionalInt;
public final class NumberFinder {
public static void main(String[] args) {
int[] numbers = { -12, 33, -43, -47, 84, 90, 67 };
int digitSought = 4;
// поиск соответствующего элемента
OptionalInt result = Arrays.stream(numbers)
.filter((i -> i % 2 == 0))
.filter(i -> {
i = Math.abs(i);
while (i != 0) {
if (i % 10 == digitSought) {
return true;
}
i /= 10;
}
return false;
})
.findAny();
// вывод результата
if (result.isPresent()) {
System.out.println("Цифра " + digitSought +
" содержится в числе " + result.getAsInt());
} else {
System.out.println(
"Соответствующий условию элемент массива найти не удалось");
}
}
}