Как вывести массив наоборот java

Как вывести массив наоборот java

Один из популярнейших вопросов на интервью для java-девелопера это просьба перевернуть массив. Это очень похоже на вопрос из прошлой статьи, про переворачивание строки, но немного про другое. Вопрос не выглядит сложным, все что нужно сделать это создать новый массив такого же размера, перебрать исходный массив от конца до нажала заполняя новый. Все, готово. Но нет, мы же создали дополнительный массив того же размера, что и исходный, что усложняет наше решение O(n). Мы не сможем использовать наше решение, если размер массива очень большой (например 10 млн элементов), а размер heap небольшой. Что мы можем тут сделать? Как улучшить наше решение? Можем ли мы перевернуть массив не создавая дополнительный буффер? Для нашей задачи предположим, что у нас массив из integer (вообще на интервью хорошая практика задавать правильные вопросы в правильных местах, как говорят знающие люди это черта хорошего программиста). Ключевое тут понять, что вам нужно перевернуть исходный массив, мы не можем использовать другой массив, но использовать одну две дополнительные переменные, вполне допустимо. Так же недопустимо использование сторонних библиотек или Java API которые могут сделать эту работу за нас, а также методов класса java.util.Arrays, за исключением Arrays.toString() чтобы выводить массивы. Когда наши требования выяснены приступим к решению задачи.

Читайте также:  Чем можно вывести бородавки папилломы

Первое что приходит в голову это перебрать все элементы массива и поменять их местами. Первый элемент и последний, второй элемент с предпоследним, и т.д. В этом случае все элементы массивы будут перевернуты без использования дополнительного буффера. Ключевая вещь здесь, которую нужно держать в голове это только что нам нужно менять местами элементы до того момента как мы достигнем середины массива, иначе мы получим тот же самый массив. Возникает закономерный вопрос, а что если массив имеет четное количество элементов? В этом случае в середине массива будут два элемента, и нам нужно поменять их местами, поэтому наше условие перебора будет содержать выражение index

Источник

Поменять порядок расположения элементов внутри массива на обратный

В консоли он выдаёт: «фазан сидит где», а необходимо, чтоб он выдавал всю фразу из colors. «фазан сидит где знать желает охотник Каждый». Не понимаю, где именно ошибка. Что нужно исправить?

5 ответов 5

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

Так же можно создать 2й массив куда будете записывать значения

Или воспользоваться Collections.reverse из библиотек java.util.Collections + java.util.Arrays

А я вот так решил задачу. Тут вам и вывод сразу в одном цикле и замена элементов местами, что собственно и требовалось сделать:

После этого в textArray будет массив «наоборот». В твоем примере в принципе все верно, но не нужно проходить по всем элементам массива. Только до половины, далее уже пойдут заменённые тобой элементы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками java или задайте свой вопрос.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.11.2.40635

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

Развернуть массив задом наперед?

Почему массив до конца не разворачивается и дает такой результат [5, 4, 3, 4, 5] ?

5 ответов 5

Вы затираете одни элементы другими из того же массива:

С новым массивом еще проще:

В первой(и последующих) итерациях цикла, заменяемое число просто затирается заменяющим, а должно попадать на его место. Т.е. когда пятерка из конца попадает в начало, то единица не попадает на место пятерки, а должна.

Еще один небольшой пример в копилку

Всё ещё ищете ответ? Посмотрите другие вопросы с метками java массивы или задайте свой вопрос.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.11.2.40635

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

Reverse string в Java: учимся реверсировать строки разными способами

1. StringBuilder/StringBuffer

2. Решение с массивом

3. Решение с charAt

4. Решение со Stack

5. Решение рекурсией

способ первый

Переменные rightStr и leftStr мы используем для разбивки пришедшей строки на две равные части. Далее с помощью такой разбивки мы дробим строку на наименьшие делимые части (1 символ). После рекурсия начинает сворачиваться, возвращая символы в противоположном порядке (те, что были справа — поставили слева; те, что были слева — вправо)

Нельзя забывать, что каждая рекурсия — это многократный вызов метода, и как следствие — немалые затраты ресурсов. Ну а если мы говорим о рекурсии с недостижимым условием выхода, то это путь в бесконечность и к StackOverflowError.

способ второй

Здесь нам понадобится дополнительный аргумент в методе — index.

При запуске этого метода он задается длиной строки -1:

Индекс у нас служит индикатором того, какой элемент строки мы будем использовать сейчас (а элементы мы будем использовать с конца).

Поэтому задаём условия выхода при достижении индексом первого элемента.

Складываем значения полученного с помощью индекса letter с результатом предыдущего выполнения метода и возвращаем результат.

способ третий

Данный способ по сути является самым простым из рекурсивных. А как мы помним, простое = лучшее.

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

6. При помощи XOR

XOR — логическая побитовая операция. В случае двух переменных результат выполнения операции истинен тогда и только тогда, когда один из аргументов истинен, а другой — ложен.

A B Y
0 0 0
0 1 1
1 0 1
1 1 0

Подробнее о побитовых операциях можно почитать в этой статье. Следующее решение будет опираться на то, что: Как будет выглядеть метод: Давайте разбираться с тем, что тут происходит. Мы создаём массив из входящей строки. Создаём две переменные, low и high, хранящие индексы для прохода по массиву. Соответственно, один будет двигаться с начала в конец — ему задаём значение 0, второй — с конца в начало, ему задаем arr.length — 1. Заходим в цикл, который будет воспроизводиться, пока индекс high больше, чем low. Тут начинает происходить самое интересное — использование исключающего ИЛИ. Давайте разберем на примере x и y. Предположим, что arr[high] = ‘x’; Двоичный код у него будет 1 1 1 1 0 0 0 В это время arr[high] = ‘n’; Двоичный код — 1 1 0 1 1 1 0 Что мы будем иметь в XOR операциях в цикле:

arr[low] = (char) (arr[low] ^ arr[high]);

arr[high] = (char) (arr[low] ^ arr[high]);

arr[low] = (char) (arr[low] ^ arr[high]);

В итоге благодаря этим операциям мы поменяли местами значения двух ячеек массива. arr[high] отдален от конца массива на столько же элементов, на сколько arr[low] отдален от начала. Поэтому мы просто меняем элементы с этими индексами местами. Например, при первом выполнении в предложении «JavaRush forever»J и r поменяются местами, при втором — a и e и т. д. Если у нас нечетное количество символов, то при достижении элемента, который находится посередине, нас выбросит из цикла (т.к. средний элемент менять и не нужно). Если чётное — нас выбросит после обработки всех элементов. Ну а после мы заходим в обычный цикл и строим строку из элементов массива.

Источник

Вывод массива java

В тему о массивах, которую мы разбирали в статье Массивы в Java. Разберем сегодня вопрос как выводить массивы в языке Java. Согласно статистике, очень много новичков сталкиваются с вопросом вывода массива и, как ни странно, испытывают трудности с этим.

В данной статье я покажу все способы вывода массива в консоль. А почитав статью о системах ввода-вывода Вы сможете вывести любой массив в файл, или другой поток.

Первый и, пожалуй, самый простой вывод — вывод одномерного массива.

Массив в программировании это структура данных предназначенная для хранения других данных или объектов. Каждый элемент массива имеет индекс, по которому он расположен в данной структуре. Чтобы получить элемент массива в языке Java нужно обратиться к нему по индексу согласно такого синтаксиса: имямассива[индексэлемента]. Другими словами, индекс элемента — это его порядок хранения в массиве. Еще одна особенность, которую нужно знать перед тем как выводить массив: индекс массива начинается с нуля.

Теперь, согласно нашим знаниям, давайте попробуем вывести все элементы одномерного массива:

public class ArrayOutput <

public static void main ( String [ ] args ) <
int [ ] a = < 1, 3, - 7, 2, 8, 23, 21, 54, 4, 5 >;

for ( int i = 0 ; i a. length ; i ++ ) <
System . out . println ( a [ i ] ) ;
>
>
>

Результатом выполнения программы будет вывод все элементов в консоль. Пример выше предполагает, что читатель знаком с такими знаниями программирования как примитивные типы в джава, циклы.

Чтобы вывести массив в обратном порядке нужно просто правильно управлять его индексом: пусть теперь счетчик цикла начинается не с нуля, а с длины массива и уменьшается к нулю. Только не забываем, что длина массива начинается с 1, а индекс с 0.

public class ArrayOutput <

public static void main ( String [ ] args ) <
int [ ] a = < 1, 3, - 7, 2, 8, 23, 21, 54, 4, 5 >;

for ( int i = a. length — 1 ; i >= 0 ; i — ) <
System . out . println ( a [ i ] ) ;
>
>
>

Теперь, когда Вы умеете управлять индексом массива — вывести двумерный массив будет не сложно.

public class ArrayOutput <

for ( int i = 0 ; i a. length ; i ++ ) <
for ( int j = 0 ; j a [ i ] . length ; j ++ ) <
System . out . println ( a [ i ] [ j ] ) ;
>
>
>
>

Вывод, правда, будет не очень похожим на матрицу. Числа будут идти друг за другом. Если немного поиграться с кодом можно вывести двумерный массив в виде матрицы.

public class ArrayOutput <

for ( int i = 0 ; i a. length ; i ++ ) <
System . out . println ( ) ;
for ( int j = 0 ; j a [ i ] . length ; j ++ ) <
System . out . print ( a [ i ] [ j ] + » » ) ;
>
>
>
>

Результатом работы программы будет следующее:

Теперь Вы знаете все способы вывода массива. Пишите в комментарии если что-то упущено. Будем разбирать и делать примеры.

Источник

Оцените статью