#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 элемент, а не aList<Integer>
с n элементами.4. Да, я изменил параметр. смотри сюда
5. Да, это позволяет вам отменить an
Integer[]
; но у OP есть anint[]
, и поэтому он не может вызвать этот метод.
Ответ №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]);
}