Как вернуть переменную Matrix методом flip?

Когда вы используете форму

[sos,g] = zp2sos(z,p,k);

g, это то же самое, что и k.

Например,

> [sos, g] = zp2sos([-1 0.5 0.6], [-0.5 0.1+0.25j 0.1-0.25j 0.9], 3);
> g
g = 3
0
задан Daniel 18 January 2019 в 23:12
поделиться

2 ответа

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

0
ответ дан Josh 18 January 2019 в 23:12
поделиться

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

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 ведьма - ссылка на себя.

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

0
ответ дан Sergei Sirik 18 January 2019 в 23:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: