Reverse Array не могу вывести с цикла
public static String[] reverse(String[] strings) {
//TODO: Напишите код, который меняет порядок расположения элементов внутри массива на обратный.
for (int i = strings.length-1;i>=0;i-- ) {
System.out.print(strings[i]);
}
return strings;
}
//застрял на элементарном функция разворачивает массив но как вывести результат из цикла?
Ответы (2 шт):
Автор решения: Алексей Шиманский
→ Ссылка
Оно?
String[] newStringArr = new String[str.length];
for (int i = str.length - 1; i >= 0; i--) {
newStringArr[str.length - 1 - i] = str[i];
}
return newStringArr;
Автор решения: Nowhere Man
→ Ссылка
Строго говоря, если просто меняется порядок элементов во входном массиве, метод reverse не обязан возвращать тот же самый массив и потому может иметь тип void (как и Arrays.sort).
Для перестановки элементов нужно просто пройти входной массив до середины, переставляя первый и последний элементы:
@SuppressWarnings("unchecked")
public static <T> void reverse1(T[] arr) {
for (int i = 0, n = arr.length, m = n-- / 2; i < m; i++) {
T tmp = arr[i];
arr[i] = arr[n - i];
arr[n - i] = tmp;
}
}
@SuppressWarnings("unchecked")
public static <T> T[] reverse(T ... arr) {
for (int i = 0, n = arr.length, m = n-- / 2; i < m; i++) {
T tmp = arr[i];
arr[i] = arr[n - i];
arr[n - i] = tmp;
}
return arr;
}
Для массивов примитивных типов int[], long[], double[], и т.д. потребуется написать отдельные перегруженные методы:
public static int[] reverse(int ... arr) {...}
public static long[] reverse(long ... arr) {...}
// etc.
Пример для конкретного массива String[]:
public static String[] reverse(String ... arr) {
for (int i = 0, n = arr.length, m = n-- / 2; i < m; i++) {
String tmp = arr[i];
arr[i] = arr[n - i];
arr[n - i] = tmp;
}
return arr;
}
