Поменяйте местами четные нечетные индексы в массиве Java - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь поменять числа в массиве int по четным и нечетным индексам.До сих пор мне удавалось выяснить, как нацеливаться на четные и нечетные индексы, но затем из-за вложенных циклов for я не могу печатать все элементы в одном массиве.Вот мой код -

public class SwapIndexes {

    public static void main(String []args) {
        int temp;
        int[] arr = {1, 2, 3, 4, 5, 6};
        for (int j = 0; j < arr.length; j += 2) {
            for (int k = 1; k < arr.length; k += 2) {
                temp = arr[j];
                arr[j] = arr[k];
                arr[k] = temp;
                System.out.print(arr[k]);
            }
        }
    }
}

Этот код дает 124312531 как вывод для arr[k] и 246124312 как вывод для arr[j].Я хочу, чтобы вывод был

2,1,4,3,6,5

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Ну, я не знаю, почему вы использовали два цикла, потому что идея была там.

Удалите второй цикл, установите k на j + 1 и логика здесь (прокомментировал код, который вам не нужен.

for (int j = 0; j < arr.length; j += 2) {
   //for (int k = 1; k < arr.length; k += 2) {
   int k = j + 1;
       temp = arr[j];
       arr[j] = arr[k];
       arr[k] = temp;
       //System.out.print(arr[k]);
   //}
}
System.out.print(Arrays.toString(arr));

Теперь вам нужно предотвратить возникновение исключений из-за неравномерной длины. Мне нравится просто использовать немного другой цикл:

for (int j = 1; j < arr.length; j += 2) {
   int k = j - 1;
   ...
}
System.out.print(Arrays.toString(arr));

Все, что вам нужно сделать, это проверить, есть ли хотя бы 2 ячейки, что имеет смысл, если вы хотите обратить массив таким образом

if(arr.length < 2)
     return;

Тест 1:

{1, 2, 3, 4, 5, 6}
[2, 1, 4, 3, 6, 5]

Тест 2:

{1, 2, 3, 4, 5, 6, 7}
[2, 1, 4, 3, 6, 5, 7]

0 голосов
/ 02 января 2019

Я действительно не понимаю, почему у вас есть две петли.Вам нужен только один, так как вам нужно просматривать массив только один раз.Вот код с одним циклом: j будет иметь все нечетные индексы, а затем вы переключите j-1 и j.
Поскольку не дается никакой спецификации поведения массива с нечетным числом элементов,в этом случае он не изменяет последнее значение.При необходимости вы можете выдать исключение.

public static void main(String []args) {
        int temp;
        int[] arr = {1, 2, 3, 4, 5, 6};
        for (int j = 1; j < arr.length; j += 2) {
                temp = arr[j-1];
                arr[j-1] = arr[j];
                arr[j] = temp;
        }
        System.out.print(Arrays.toString(arr));
}
...