Как повернуть массив на 90 градусов java
Перейти к содержимому

Как повернуть массив на 90 градусов java

  • автор:

Переворот массива на 90 градусов

Author24 — интернет-сервис помощи студентам

Дан массив N × M. Требуется повернуть его по часовой стрелке на 90 градусов.

Входные данные
На первой строке даны натуральные числа N и M (1 ≤ N, M ≤ 50). На следующих N строках записано по M неотрицательных чисел, не превышающих 109 – сам массив.

Выходные данные
Выведите повернутый массив в формате входных данных.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Переворот двумерного массива на 90 градусов
Есть прямоугольный двумерный массив размерностью NxM. Требуется создать и вывести новый массив.

переворот двумерного массива на 90 градусов
Двумерный массив передать в функцию и перевернуть его на 90 градусов, результат вывести в main.

Переворот матрицы (двумерного массива) на 90 градусов по часовой стрелке
Доброго времени суток! Хотелось бы узнать больше о методе (кажется так и называется) zip. Насколько.

Переворот букв при рисовании на 180 градусов
Есть такой код: Graph1.DrawString("A", DrawFont, DrawBrush, X1 + 1, Y1 + 1) .

перевернуть массив

Почему не выводится перевернутый массив? то есть, последний элемент массива должен стать первым и т.д.

public class Mane < public void sort(int[] massive)< int[]arraySort = new int[10]; for(int i = 4; i >= 0; i--) < arraySort[4 - i] = massive[i]; for(int a = 0; a < 5; a++)< massive[a] = arraySort[a]; >> > public static void main(String[] arg)< int[] mass = ; Mane m = new Mane(); m.sort(mass); for(int i: mass) < System.out.println(i); >> > 

Отслеживать
68.2k 225 225 золотых знаков 80 80 серебряных знаков 223 223 бронзовых знака
задан 8 фев 2016 в 16:23
99 2 2 золотых знака 2 2 серебряных знака 8 8 бронзовых знаков
Вы дебажить пробовали?
8 фев 2016 в 16:24
я конечно не эксперт, но чет код слишком запутан.
8 фев 2016 в 16:25

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

Зачем два массива, зачем вложенные циклы?

public void sort(int[] massive) < for (int i = 0; i < massive.length / 2; i++) < int tmp = massive[i]; massive[i] = massive[massive.length - i - 1]; massive[massive.length - i - 1] = tmp; >> 

Отслеживать
ответ дан 8 фев 2016 в 16:43
875 5 5 серебряных знаков 8 8 бронзовых знаков
Не знаю почему но у меня java.lang.ArithmeticException: divide by zero
11 фев 2017 в 2:47
@АндрейШпилевой где же вы там нашли деление на 0?
12 фев 2017 в 11:49
не я, а студия нашла
23 фев 2017 в 18:22
Спросите её тогда.
23 фев 2017 в 18:24

Collections.reverse(Arrays.asList(source)).toArray(new int[source.length]); 

да, это будет использовать избыточные ресурсы; нет, это не страшно

Отслеживать
ответ дан 8 фев 2016 в 16:47
36.2k 2 2 золотых знака 56 56 серебряных знаков 83 83 бронзовых знака
Обоснуйте фразу «нет, это не страшно». Вы случайно не разработчик Google Chrome?
8 фев 2016 в 17:09

Прикольно, но на примитивах не сработает, java.util.Collections.reverse ничего не возвращает, toArray(new int[whatever]) тоже работать не будет. ЗИС ИЗ ЖАВА!11

8 фев 2016 в 17:12

Кроме того, Arrays.asList создает представление над массивом, и вызовы set на этом списке меняют исходный массив, т.е. для Integer[] source = <1, 2, 3, 4, 5>; вызов Collections.reverse(Arrays.asList(source)) сделает перестановку в source .

8 фев 2016 в 17:15
@zRrr да, я попался на эту удочку, ответ писал параллельно болтая в офисе, позор мне.
8 фев 2016 в 19:04

Конечному пользователю все равно, сколько времени потрачено на код — ему главное, чтобы работало, и работало быстро. Ваш код: 1) не работает, 2) даже исправленный, создает ненужную копию массива в памяти. Если учить новичка, то зачем сразу плохому?

Как перевернуть массив в Java

Мы увидим несколько различных способов сделать это, используя чистые решения на основе Java 8 — некоторые из них изменяют существующий массив, а некоторые создают новый.

Далее мы рассмотрим два решения с использованием внешних библиотек — одно с использованием Apache Commons Lang и одно с использованием Google Guava .

2. Определение проблемы

Основная идея состоит в том, чтобы изменить порядок элементов в массиве на обратный. Итак, если задан массив:

 fruits = "apples", "tomatoes", "bananas", "guavas", "pineapples"> 

Мы хотели бы получить:

 invertedFruits = "pineapples", "guavas", "bananas", "tomatoes", "apples"> 

Давайте посмотрим, как мы можем это сделать.

3. Использование традиционного цикла for

Первый способ, которым мы могли бы подумать об инвертировании массива, — это использовать цикл for :

 void invertUsingFor(Object[] array)    for (int i = 0; i  array.length / 2; i++)    Object temp = array[i];   array[i] = array[array.length - 1 - i];   array[array.length - 1 - i] = temp;   >   > 

Как мы видим, код перебирает половину массива, меняя элементы в симметричных позициях.

Мы используем временную переменную, чтобы не потерять значение текущей позиции массива во время итерации.

4. Использование потокового API Java 8

Мы также можем инвертировать массив с помощью Stream API:

 Object[] invertUsingStreams(Object[] array)    return IntStream.rangeClosed(1, array.length)   .mapToObj(i -> array[array.length - i])   .toArray();   > 

Здесь мы используем метод IntStream.range для генерации последовательного потока чисел. Затем мы отображаем эту последовательность в индексы массива в порядке убывания.

5. Использование Collections.reverse()

Давайте посмотрим, как инвертировать массив с помощью метода Collections.reverse() :

 public void invertUsingCollectionsReverse(Object[] array)    ListObject> list = Arrays.asList(array);   Collections.reverse(list);   > 

По сравнению с предыдущими примерами, это более читабельный способ выполнения задачи.

6. Использование Apache Commons Lang

Другой вариант инвертирования массива — использовать библиотеку Apache Commons Lang . Чтобы использовать его, мы должны сначала включить библиотеку в качестве зависимости:

 dependency>   groupId>org.apache.commonsgroupId>   artifactId>commons-lang3artifactId>   version>3.12.0version>   dependency> 

Последнюю версию Commons Lang можно найти на Maven Central .

Давайте используем класс ArrayUtils для инвертирования массива:

 public void invertUsingCommonsLang(Object[] array)    ArrayUtils.reverse(array);   > 

Как мы видим, это решение довольно простое.

7. Использование Google Гуавы

Еще один вариант — использовать библиотеку Google Guava . Как и в случае с Commons Lang , мы включим библиотеку в качестве зависимости:

 dependency>   groupId>com.google.guavagroupId>   artifactId>guavaartifactId>   version>31.0.1-jreversion>   dependency> 

Последнюю версию можно найти на Maven Central .

Затем мы можем использовать обратный метод в классе Lists Guava, чтобы инвертировать массив: «

 public Object[] invertUsingGuava(Object[] array)    ListObject> list = Arrays.asList(array);   ListObject> reversed = Lists.reverse(list);   return reversed.toArray();   > 

8. Заключение

В этой статье мы рассмотрели несколько различных способов инвертирования массива в Java. Мы показали несколько решений, использующих только ядро Java, и два других решения, использующих сторонние библиотеки — Commons Lang и Guava .

Все примеры кода, показанные здесь, можно найти на GitHub — это проект Maven, поэтому его легко импортировать и запускать как есть.

Rotating multi-dimensional array by 90 degrees clockwise [closed]

Want to improve this question? Update the question so it focuses on one problem only by editing this post.

Closed 3 years ago .

I’ve been able to work out the bulk of the problem. But my output keeps throwing an exception. I’m sure it’s something minor, but I can’t seem to figure out how to make this work right. I’m including the exception, the task as originally worded to me, along with my code so far: Using formula array[j][n — 1 — i] I get the following exception:

Exception in thread «main» java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 4 at com.company.Main.main(Main.java:20)

If I use array[j][n — i] I get no exception, but it isn’t the correct output order. Been stuck on this for a week!

Given a rectangle array n×m in size. Rotate it by 90 degrees clockwise, by recording the result into the new array m×n in size. Input data format: Input the two numbers n and m , not exceeding 100, and then an array n×m in size. Output data format: Output the resulting array. Separate numbers by a single space in the output. Sample Input 1:

3 4 11 12 13 14 21 22 23 24 31 32 33 34 

Sample Output 1:

31 21 11 32 22 12 33 23 13 34 24 14 
class Main < public static void main(String[] args) < Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int m = scanner.nextInt(); int[][] array = new int[n][m]; for (int i = 0; i < n; i++) < for (int j = 0; j < m; j++) < array[i][j] = scanner.nextInt(); >> for (int i = 0; i < m; i++) < for (int j = 0; j < n; j++) < System.out.print(array[j][n - 1 - i] + " "); >System.out.println(""); > > > 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *