Матричный класс - Java - PullRequest
       12

Матричный класс - Java

0 голосов
/ 24 октября 2018

У меня проблема с классом матрицы.Мне нужно написать несколько методов и на самом деле застрял.Мой класс выглядит следующим образом:

public class Matrix {

    private double[] data;
    private int rows;
    private int cols;

    public Matrix(int rows, int cols){
        this.rows = rows;
        this.cols = cols;
        data = new double[rows*cols];
    }

    public Matrix(double[][] data){

        int rows = data.length;
        int cols = 0;

        for(int i = 0; i < data.length; i++){

            if(data[i].length > cols)
                cols = data[i].length;
        }

        Matrix matrix = new Matrix(rows, cols);

        for(int j = 0; j < rows; j++){
            for(int k = 0; k < cols; k++){
                if(data[j][k] <= 0)
                data[j][k] = 0;
            }
        }

    }

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

double[][] data = {{1,2,3},{4,5},{6}};

Это создаст матрицу, где есть 3 строки и 3 столбца, а остальная часть моей таблицы должна быть заполнена нулями.Таким образом, окончательная матрица выглядит следующим образом:

1 2 3
4 5 0
6 0 0

Как я могу достичь этого - я имею в виду - как заполнить оставшиеся поля с нулями в этой матрице?Я думал о сравнении, например.

for(int i = 0; i < rows; i++)
    for(int j = 0; j < cols; j++)
        if(matrix[i][j] == null)
            matrix[i][j] = 0;

но это невозможно, как тогда?

1 Ответ

0 голосов
/ 24 октября 2018

Здесь:

if(matrix[i][j] == null)

matrix - это экземпляр вашего класса Matrix.Но приведенный выше синтаксис предназначен для доступа к массиву.

Тот факт, что ваш класс Matrix владеет массивом, не позволяет использовать экземпляры Matrix в качестве массивов.

Помимо этого,у вас есть фундаментальное заблуждение, как массивы работают в Java.

double[][] data = {{1,2,3},{4,5},{6}};

, который не создает матрицу 3x3.он создает массив двойных массивов.Первая запись имеет три значения, вторая запись представляет собой массив с 2 значениями, а третья содержит 1 значение.

Значение: вы не можете изменить размеры массива после создания .Если вы хотите иметь 3 строки с 3 столбцами, вам нужно использовать такие вещи, как:

 double first[] = new double[3];
 double sec[] = new double[3];
 double third[] = new double[3];

 double matrix[][] = { first, sec, third };

Короче говоря: реальный ответ здесь - сделать шаг назад и больше изучить, как работают массивы в Java, здесь - хорошая отправная точка.

...