Помогите с RuntimeException. Входной массив должен содержать хотя бы одну четверку, иначе в методе необходимо выбросить RuntimeException Java
public class NewArray {
public static void main(String[] args) {
int[] sourceArray = {1, 2, 4, 4, 2, 3, 1, 4, 1, 7};
resultArray(sourceArray);
}
public static void resultArray(int[] sourceArray) {`введите сюда код`
// Искомое число
int searchedNumber = 4;
// Получаем числа из массива после искомого числа в обратном порядке
int[] reverseArray = IntStream.range(0, sourceArray.length)
// Обходим индексы массива в обратную сторону
.map(i -> sourceArray.length - 1 - i)
// Элементы массива
.map(i -> sourceArray[i])
// Пока не встретили искомый элемент
.takeWhile(i -> i != searchedNumber)
// Выгружаем в массив
.toArray();
// Разворачиваем массив
int[] resultArray = IntStream.range(0, reverseArray.length)
// Обходим индексы массива в обратную сторону
.map(i -> reverseArray.length - 1 - i)
// Элементы массива
.map(i -> reverseArray[i])
// Выгружаем в массив
.toArray();
// Выводим результат
System.out.println(Arrays.toString(resultArray));
}
}
Ответы (3 шт):
Автор решения: Павел Ериков
→ Ссылка
Например можно сделать так:
int firstIndex = IntStream.range(0, sourceArray.length)
.filter(i -> searchedNumber == sourceArray[i])
.findFirst()
.orElse(-1);
if(firstIndex == -1)
throw new RuntimeException("Массив должен содержать минимум 1 четверку");
То есть мы находим индекс первого вхождения searchedNumber в массиве sourceArray. Если такого элемента в массиве нет, то возвращаем -1. Ну а дальше проверку просто делаем. По факту код выше это аналог функции indexOf.
Автор решения: Дмитрий
→ Ссылка
стрим умеет бросать исключение, а для копирования массива не нужен второй стрим.
import java.util.Arrays;
import java.util.stream.IntStream;
public class NewArray {
public static void main(String[] args) {
int searchedNumber = 4;
int[] sourceArray = {1, 2, 4, 4, 2, 3, 1, 4, 1, 7};
int[] result = resultArray(sourceArray, searchedNumber);
System.out.println(Arrays.toString(result));
}
public static int[] resultArray(int[] sourceArray, int searchedNumber) {
int index = IntStream.range(0, sourceArray.length)
.map(i -> sourceArray.length - 1 - i)
.filter(i->sourceArray[i]==searchedNumber)
.findFirst().orElseThrow(()->new RuntimeException());
int[] result = new int[sourceArray.length-index-1];
System.arraycopy(sourceArray, index+1, result, 0, sourceArray.length-index-1);
return result;
}
}
Автор решения: Александр Киласония
→ Ссылка
int firstIndex = IntStream.range(0, sourceArray.length)
.filter(i -> searchedNumber == sourceArray[i])
.findFirst()
.orElse(-1);`введите сюда код`
if(firstIndex == -1)
throw new RuntimeException("Массив должен содержать минимум 1 четверку");