как перевести длину строки в длину и перевернуть, если они не имеют одинаковую длину (Java)

1

hi мой код работает, если массив имеет одинаковую длину для строк и столбцов. но когда они разные, они не работают. как я могу передать длину моему новому массиву?

public class rotatearray {
    public static void main(String[] args) {
        int[][] a = {{1, 2, 3,4},
                {4, 5,6,5},
                {7, 8, 9,7}};
        rotate(a);
    }

    public static int[][] rotate(int[][] a) {
        int[][] b = new int[a.length][a.length];
        for(int i=0; i<a.length; i++){
            for(int j=0; j<a[i].length; j++){
                b[j][i] = a[a.length-i-1][a.length-j-1];
                System.out.print(b[j][j]);
            }
        }
        return b;
    }
}
  • 0
    Вы должны перенести данные в новый массив?
  • 0
    Конечно. Массив - это ОБЪЕКТ, как и Строка. Единственное отличие этого объекта - это «указатель» на «коллекцию» ссылок на другие объекты. Вы можете использовать класс Arrays для создания копий массивов. УБЕДИТЕСЬ, ЧТО ВЫ ПРОЧИТАЛИ API ВНИМАТЕЛЬНО, ЕСЛИ ВЫ ДЕЛАЕТЕ. Кроме того, вы можете использовать цикл, чтобы получить значение из одного места и поместить его во вновь созданный массив.
Показать ещё 2 комментария
Теги:
arrays

3 ответа

1
Лучший ответ

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

Я объявляю переменные для исходной строки и длины столбца. Это облегчает обзор с первого взгляда, что они должны означать.

Вам также нужно будет присвоить массив "a" возвращаемым значением метода rotate, поскольку размер исходного массива не может быть изменен после создания.

import java.util.Arrays;

public class ArrayRotator {
    public static void main(String[] args) {
        int[][] a = { { 1, 2, 3, 4 }, { 4, 5, 6, 5 }, { 7, 8, 9, 7 } };

        // uses rotate method to assign new value to array
        a = rotate(a);

    }

    public static int[][] rotate(int[][] arr) {
        // return if supplied array is empty
        if (arr.length == 0) {
            return new int[0][0];
        }

        // create new array with swapped length for rows and columns
        int origRows = arr.length;
        int origCols = arr[0].length;
        int[][] rotatedArr = new int[origCols][origRows];

        for (int i = 0; i < origRows; i++) {
            for (int j = 0; j < origCols; j++) {
                // Rotate array 90 degrees clockwise:
                // new row <- original column
                // new column <- original row, reversed
                rotatedArr[j][i] = arr[origRows - 1 - i][j];
            }
        }

        return rotatedArr;
    }
}
  • 0
    спасибо это работает :)
2

ANSWER: вы не можете изменять размер массива после его создания.

Чтобы "повернуть" ваш массив, вам придется создать еще один 2D-массив, в котором длина столбца равна длине строк оригинала, а длина строк равна длине столбца оригинала.

  • 0
    хорошо, я попробую это ты
1

Проблема в том, что вы используете длину строк матрицы, чтобы получить размер строк и столбцов. Поэтому он работает только на квадратных матрицах. Попробуйте это, и вы скажете разницу:

int[][] m = new int[3][4];
System.out.println(m.length);
System.out.println(m[0].length);
  • 0
    но не кодируйте m[0].length , оно не обязательно совпадает с m[1].length и так далее. Часть, которая делает j<a[i].length является правильным способом считывания длины каждой подмассивы.
  • 1
    Конечно, я хотел просто уточнить, что цифры, приведенные в каждом отпечатке, будут разными.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню