Тема: Допоможіть початківцю 2 задачі
1. Як із масиву вивести число, яке знаходиться посередині (1,4,6,7,3,8) => 6 ?
2. Як в масиві замінити числа, які повторюються на нуль (4,6,7,4,5,4,7)=> 4,6,7,0,5,0,0?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Java → Допоможіть початківцю 2 задачі
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
1. Як із масиву вивести число, яке знаходиться посередині (1,4,6,7,3,8) => 6 ?
2. Як в масиві замінити числа, які повторюються на нуль (4,6,7,4,5,4,7)=> 4,6,7,0,5,0,0?
1. Поділити довжину масиву на два і матимете ~середній елемент. Його вивести як звично.
2. Простий спосіб — пробігтися двома циклами, порівнюючи елементи. Складніший, який я використав би: ужити stream'ів.
Якщо поділити довжину масиву на 2 - виводить індекс елемента, а не значення
Якщо поділити довжину масиву на 2 - виводить індекс елемента, а не значення
Саме так, виведіть елемент по індексу. Це просто.
...Складніший, який я використав би: ужити stream'ів.
public static void main(String[] args){
//якщо цифри 0-9
int[] one = {4,6,7,4,5,4,7,1, 1, 1, 2, 4, 9};
IntUnaryOperator mapper = new IntUnaryOperator(){
boolean[] memory = new boolean[10];
int j;
@Override
public int applyAsInt(int i){
j = memory[i]? 0 : i;
memory[i]=true;
return j;
};
};
Arrays.stream(one).map(mapper).forEach(System.out::println);
System.out.println("\n\n===========\n\n");
//якщо цифри int, вмісто масиву використовуємо мапу
int[] two = {12, 14, 13, 15, 14, 14, 34, 34, 36, 99, -34, -12, 0, -19999, -12, 13};
Supplier<IntStream> stream = () -> Arrays.stream(two);
Map<Integer,Boolean> memory = stream.get().distinct().boxed()
.collect(Collectors.toMap(Function.identity(),v -> false));
Function<Map<Integer,Boolean>,IntUnaryOperator> newMapper =
m -> i -> m.get(i)? 0 : m.put(i,true)? 0 : i;
stream.get().map(i -> newMapper.apply(memory).applyAsInt(i)).forEach(System.out::println);
}
Хотів зробити за одним проходом циклу, та на жаль в 2-му випадку не зміг.
Там трохи завеликий мапер вийшов, але щоб функція залишилась функцією (працювала з параметрами та не мала якихось побічних ефектів - довелось)
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися