Как вернуть переменную Matrix методом flip? - PullRequest
0 голосов
/ 19 января 2019

я написал следующий код:

public class Matrix
{
    private final int[][] array;
    private final int size1;
    private final int size2;
Matrix(int size1,int size2)
    {
        this.size1=size1;
        this.size2=size2;
        this.array=new int[size1][size2];
    }

    Matrix(int[][] color)
    {
        this.size1=color.length;
        this.size2=color[0].length;
        this.array= new int[size1][size2];

        for(int row=0;row<size1;row++)
        {
            for(int column=0;column<size2;column++)
            {
                this.array[row][column]=color[row][column];
            }
        }
    }

    }
    public Matrix flipVertically()
    {
     Matrix newArray=new Matrix(array);
    for(int row=size1-1;row>=0;row--)
    {
        for(int column=0;column<array[row].length;column++)
        {
           newArray[row][column]=array[size1][size2];     
    }
}
return newArray;
}
}

и мой метод должен вернуть новую Матрицу, внутри которой первая строка становится последней строкой, вторая строка становится второй последней строкой и так далее ...

Я написал этот код, но у меня есть 2 проблемы:

  1. когда я пишу newArray[row][column]=array[size1][size2]; он пишет мне: матрица требуется, но массив найден. почему это пишет? и как я могу это исправить?

  2. что значит вернуть переменную "Метрикс"? как это выглядит?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Если я вас правильно понял, вот что вы хотите:

public class Matrix {

  private final int[][] array;
  private final int size1;
  private final int size2;

  Matrix(int size1, int size2) {
    this.size1 = size1;
    this.size2 = size2;
    this.array = new int[size1][size2];
  }

  @Override
  public String toString() {
    StringBuilder builder = new StringBuilder();

    for (int[] arr: array)
      builder.append(Arrays.toString(arr) + "\n");

    return "Matrix{" +
        "array=\n" + builder +
        '}';
  }

  Matrix(int[][] color) {
    this.size1 = color.length;
    this.size2 = color[0].length;
    this.array = new int[size1][size2];

    for (int row = 0; row < size1; row++) {
      for (int column = 0; column < size2; column++) {
        this.array[row][column] = color[row][column];
      }
    }


  }

  public Matrix flipVertically() {
    int start = 0, end = size1 - 1;

    while (start < end) {
      int[] tmp = array[start];
      array[start] = array[end];
      array[end] = tmp;
      start++;
      end--;
    }

    return this;
  }

  public static void main(String[] args) {
    Matrix matrix = new Matrix(new int[][]{{1,2,3}, {4,5,6}, {7,8,9}});
    System.out.println(matrix.flipVertically());
    matrix = new Matrix(new int[][]{{1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}});
    System.out.println(matrix.flipVertically());
    matrix = new Matrix(new int[][]{{1}});
    System.out.println(matrix.flipVertically());
    matrix = new Matrix(new int[][]{{1},{2},{3}});
    System.out.println(matrix.flipVertically());
  }

Вывод:

Matrix{array=
[7, 8, 9]
[4, 5, 6]
[1, 2, 3]
}
Matrix{array=
[10, 11, 12]
[7, 8, 9]
[4, 5, 6]
[1, 2, 3]
}
Matrix{array=
[1]
}
Matrix{array=
[3]
[2]
[1]
}

Чтобы ответить на ваши вопросы:

  1. Как уже упоминалосьвыше вы создаете новый экземпляр класса Matrix, а не массив.Кроме того, это newArray[row][column]=array[size1][size2]; не то, как вы можете скопировать массив в Java, хотя я не думаю, что вам вообще нужно его копировать - посмотрите мою реализацию.В любом случае, если вы хотите скопировать ваш массив, пожалуйста, обратитесь к этой копии двумерного массива в java
  2. Переменная типа матрицы, которую вы можете создать следующим образом: Matrix matrix = new Matrix(new int[][]{{1,2,3}, {4,5,6}, {7,8,9}});.В моем коде я просто возвращаю this witch - это ссылка на себя.

PS Советы по улучшению вашего кода: добавьте методы получения и установки, сделайте ваш конструктор общедоступным, если нет причин сохранять его friendly, проверьте угловые случаи, когда в конструктор передан пустой массив ....

0 голосов
/ 19 января 2019

Ваша проблема в том, что вы обрабатываете экземпляр Matrix как массив;это не. имеет массив.Если вы хотите манипулировать внутренним массивом экземпляра newArray (я настоятельно рекомендую переименовать эту переменную в newMatrix), вы можете сделать это, открыв newArray.array.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...