Как умножить нечетные числа в массиве
- Что необходимо добавить в код, что бы на выходе нечетные числа умножались на
nчисло ? - Почему при замене
(int i : arr)на аналогичный(int i = 0; i < arr.length; i++)выдает неправильный результат ?
public static void printOddNumbers(int[] arr) {
StringBuilder s = new StringBuilder();
for (int i : arr) if (i % 2 != 0) s.append(i +",");
s.deleteCharAt(s.length()-1);
System.out.println(s);
}
Ответы (2 шт):
Автор решения: Podushkoved
→ Ссылка
Переписал ваш код на стримах, немного изменил условие для наглядности. Надеюсь, ответил на интересующие вопросы:
public class Test {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 6, 4, 8, 3, 19};
int multiplier = 2;
printOddNumbers(arr, multiplier);
}
public static void printOddNumbers(int[] arr, int multiplier) {
// Обход индексов элементов массива
IntStream.range(0, arr.length)
// Индексы элементов массива начинаются с 0
// поэтому нечетные элементы имеют четные индексы
.filter(i -> i % 2 == 0)
// По индексу берем элемент массива
// и умножаем его на заданное число
.map(i -> arr[i] * multiplier)
// Выводим результат
.forEach(System.out::println);
}
}
Вывод:
┌-----------------┬------------------┐
│ Без метода map │ С методом map │
│ выводим индексы │ выводим элементы │
├-----------------┼------------------┤
│ 0 │ 2 │
│ 2 │ 12 │
│ 4 │ 16 │
│ 6 │ 38 │
└-----------------┴------------------┘
Если нужно точно как в задаче:
public class Test {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 6, 4, 8, 3, 19};
int multiplier = 2;
printOddNumbers(arr, multiplier);
}
public static void printOddNumbers(int[] arr, int multiplier) {
// Обход элементов массива
Arrays.stream(arr)
// Отбираем элементы
// с нечетными значениями
.filter(i -> i % 2 != 0)
// Умножаем на заданное число
.map(i -> i * multiplier)
// Выводим результат
.forEach(System.out::println);
}
}
Вывод:
┌----------------┬----------------┐
│ Без метода map │ С методом map │
├----------------┼----------------┤
│ 1 │ 2 │
│ 3 │ 6 │
│ 19 │ 38 │
└----------------┴----------------┘
Автор решения: Aleksandr
→ Ссылка
Добавить доп параметр и в коде умножать:
public static void printOddNumbers(int[] arr, int n) { StringBuilder s = new StringBuilder(); for (int i : arr) { if (i % 2 != 0) { s.append(i * n).append(","); } } s.deleteCharAt(s.length() - 1); System.out.println(s); }Потому что надо работать не с i, а с элементом массива arr[i]:
public static void printOddNumbers2(int[] arr, int n) { StringBuilder s = new StringBuilder(); for (int i = 0; i < arr.length; i++) { if (arr[i] % 2 != 0) { s.append(arr[i] * n).append(","); } } s.deleteCharAt(s.length() - 1); System.out.println(s); }