Как умножить нечетные числа в массиве

  1. Что необходимо добавить в код, что бы на выходе нечетные числа умножались на n число ?
  2. Почему при замене (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
  1. Добавить доп параметр и в коде умножать:

     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);
     }
    
  2. Потому что надо работать не с 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);
     }
    
→ Ссылка