Вы никогда не создаете экземпляр переменной Matrix
class 'matrix
. Когда вы строите Матрицу в этой строке:
Matrix tab = new Matrix();
поля rozmiar
и matrix
будут инициализированы в значения по умолчанию (пустые), которые равны null
для поля matrix
.
Тогда это никогда не назначается позже, но вы пытаетесь отложить его в рассматриваемой строке, что создает исключение NullPointerException.
Исправление заключается в инициализации матрицы, когда вы знаете размер, что-то вроде этого в строке 23:
tab.rozmiar = parser;
tab.matrix = new double[parser][];
Обратите внимание, что это двумерный массив, поэтому вам необходимо также создать каждый вложенный массив, например, по строке 32:
for(int ai=1; ai<=tab.rozmiar; ai++){
tab.matrix[ai] = new double[tab.rozmiar];
for(int aj=1; aj<=tab.rozmiar; aj++){
Однако лучшим решением может быть полное избавление от пустого конструктора Matrix и вместо этого добавить конструктор, который принимает целочисленный аргумент и устанавливает поля. Это улучшение, поскольку тогда невозможно построить объект в недопустимом состоянии - всегда лучше требовать аргументы в конструкторе, чем инициализировать пустой объект позже.
Так что это может выглядеть так:
class Matrix{
public Matrix(int size) {
rozmier = size;
matrix = new double[size][];
for (int i = 0; i < size; i++)
{
matrix[i] = new double[size];
}
}
final int rozmiar;
final double matrix[][];
}
и затем, чтобы использовать его, вы сначала не создадите пустое tab
, а определите размер для его создания, что-то вроде этого:
public static void main(String[] args){
int parser;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in) );
System.out.println("Podaj rozmiar macierzy: ");
try {
parser = Integer.parseInt(br.readLine());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Matrix tab = new Matrix(parser);
// The rest as before