Попытка изменить элементы массива

#java

Вопрос:

Я пытаюсь отсортировать элементы массива в обратном порядке, но, похоже, это не дает мне правильного вывода. я много раз пытался исправить это, но не смог этого сделать. Я полный новичок. какая-нибудь помощь?

код

 import java.util.Arrays;
import java.util.Scanner;

public class main {

    public static void main(String[] args) {
        int[] arr = new int[5];
        Scanner input = new Scanner(System.in);
        System.out.println("Enter the array Elements");
        for (int i = 0; i < 5; i  ) {
            arr[i] = input.nextInt();
        }
        swap(arr);
        input.close();
    }

    static void swap(int arr[]) {
        for (int start = 0; start < 5; start  ) {
            for (int end = arr.length - 1; end >= 0; end--) {
                if (start >= end) {
                    System.out.println(Arrays.toString(arr));
                    System.exit(0);
                } else {
                    int temp = arr[start];
                    arr[start] = arr[end];
                    arr[end] = temp;
                }
            }

        }

    }
}
 

Комментарии:

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

2. @FedericoklezCulloca Я понимаю, но почему мой код не работает?

3. Примечание: вы , по сути, никогда не должны вызывать System.exit() , особенно в методе, который предназначен только для обращения массива. Если вы хотите, чтобы метод был остановлен, используйте return (или создайте исключение, если вы хотите остановиться из-за проблемы).

4. @AbhinavK «но почему мой код не работает» просмотрите свой код с помощью отладчика; или, по крайней мере, arr регулярно распечатывайте, чтобы вы могли видеть, как он изменяется.

Ответ №1:

Если вы хотите поменять местами элементы в массиве, вам нужно написать swap() такой метод:

 static void swap(int[] arr) {
    for (int start = 0; start < arr.length / 2; start  ) {
        int tmp = arr[arr.length - 1 - start];
        arr[arr.length - 1 - start] = arr[start];
        arr[start] = tmp;
    }
}
 

Ответ №2:

 import java.util.Arrays; 
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
         int[] arr = new int[5];
        Scanner input = new Scanner(System.in);
        System.out.println("Enter the array Elements");
        for (int i = 0; i < 5; i  ) {
            arr[i] = input.nextInt();
        }
        swap(arr,arr.length  );
        input.close();
    }
    
     static void swap(int a[], int n) {
         int i, k, t;
        for (i = 0; i < n / 2; i  ) {
            t = a[i];
            a[i] = a[n - i - 1];
            a[n - i - 1] = t;
        }
 
        /*printing the reversed array*/
        System.out.println("Reversed array is: n");
        for (k = 0; k < n; k  ) {
            System.out.println(a[k]);
        }

    }
 

}

Ответ №3:

Вы можете использовать «обратный» метод, присутствующий в структуре коллекций. Но для этого вам сначала нужно преобразовать массив в список, так как метод «обратный» принимает список в качестве аргумента.

 static void swap(Integer arr[]) { 
     Collections.reverse(Arrays.asList(arr)); 
     System.out.println(Arrays.toString(myArray));
  } 
 

Комментарии:

1. Вы действительно пробовали это сделать? Если вы этого не сделали, попробуйте .

2. да, я пробую это, и это работает!

3. Он, безусловно, компилируется и запускается; он просто не поворачивается вспять arr . Проверьте ссылку в моем предыдущем комментарии. Arrays.asList(arr) имеет List<int[]> 1 элемент, а не a List<Integer> с n элементами.

4. Да, я изменил параметр. смотри сюда

5. Да, это позволяет вам отменить an Integer[] ; но у OP есть an int[] , и поэтому он не может вызвать этот метод.

Ответ №4:

Вы можете использовать ArrayUtils#reverse https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/ArrayUtils.html#reverse-int:A — Чтобы избежать создания List и реверсирования массива на месте.

Ответ №5:

Лично я бы использовал метод коллекций, преобразуя ваш массив в список, сортируя его методом reverse (), а затем преобразуя его обратно в массив, вот так:

 public void invert(int[] array) {
    List<int> list = Arrays.asList(array);
    Collections.reverse(list);
    array = list.toArray(new int[0]);
}