Поменять порядок расположения элементов внутри массива на обратный
Есть код:
String text = "Каждый охотник желает знать, где сидит фазан";
String[] colors = text.split(",?\\s+");
for (int i = 0; i < colors.length; i++)
{
String result = colors[i];
colors[i] = colors[colors.length - i - 1];
colors[colors.length - i - 1] = result;
System.out.println(colors[i]);
}
В консоли он выдаёт: "фазан сидит где", а необходимо, чтоб он выдавал всю фразу из colors. "фазан сидит где знать желает охотник Каждый". Не понимаю, где именно ошибка. Что нужно исправить?
Ответы (5 шт):
for (int i = 0; i < colors.length / 2; i++)
{
String result = colors[i];
colors[i] = colors[colors.length - i - 1];
colors[colors.length - i - 1] = result;
}
for (int i = 0; i < colors.length; i++)
{
System.out.println(colors[i]);
}
String text = "Каждый охотник желает знать, где сидит фазан";
List<String> colors = Arrays.stream(text.split(",?\\s+")).collect(Collectors.toList());
Collections.reverse(colors);
colors.forEach(System.out::println);
Ваша ошибка в том, что вы проходите цикл по всему массиву, при этом одновременно меняя 2 элемента
for (int i = 0; i < colors.length / 2; i++) {
String result = colors[i];
colors[i] = colors[colors.length - i - 1];
colors[colors.length - i - 1] = result;
}
Так же можно создать 2й массив куда будете записывать значения
String text = "Каждый охотник желает знать, где сидит фазан";
String[] colors = text.split(",?\\s+");
String[] result = new String[colors.length];
for (int i = 0; i < colors.length; i++) {
result[i] = colors[colors.length - i - 1];
System.out.println(result[i]);
}
Или воспользоваться Collections.reverse из библиотек java.util.Collections + java.util.Arrays
String text = "Каждый охотник желает знать, где сидит фазан";
String[] colors = text.split(",?\\s+");
Collections.reverse(Arrays.asList(colors));
System.out.println(Arrays.asList(colors));
А я вот так решил задачу. Тут вам и вывод сразу в одном цикле и замена элементов местами, что собственно и требовалось сделать:
String text = "Каждый Охотник Желает Знать, Где Сидит Фазан";
String[] colors = text.split(",?\\s+");
String temp = "";
for (int i = 0; i < colors.length; i++)
{
if (i <= (colors.length / 2)) {
temp = colors[i];
colors[i] = colors[colors.length - i -1];
System.out.println(colors[i]); //
colors[colors.length - i - 1] = temp;
}
else {
System.out.println(colors[i]); //
}
}
String text = "Каждый охотник желает знать, где сидит фазан.";
String[] textArray = text.split(",?\\s+");
String temp = "";
for (int i = 0; i < textArray.length / 2; i++)
{
temp = textArray[i];
textArray[i] = textArray[textArray.length - 1 - i];
textArray[textArray.length - 1 - i] = temp;
}
После этого в textArray будет массив "наоборот". В твоем примере в принципе все верно, но не нужно проходить по всем элементам массива. Только до половины, далее уже пойдут заменённые тобой элементы.