Я пытаюсь инициализировать массив (из созданного мною объекта класса) из 2 измерений, но у меня по-прежнему возникает одна и та же ошибка времени выполнения:
Exception in thread "main" java.lang.NullPoointerException
at ........
Мне удалось сделать это с примитивными типами, но не с типами, расширяющими объект, и я хотел бы знать, возможно ли это (и если да, то как).
Вот пример моего кода:
MyCustomObject[][] matrix = new MyCustomObject[10][10];
for (int i = 0; i < 10; i += 1)
matrix[i][0] = new MyCustomObject("some arguments ...");
Ошибка отмечена в строке, где я пытаюсь присвоить матрице значение: matrix [i] [0] = ....
Из того, что я понимаю после моих исследований, Java дала значение null каждому члену массива, что мне подходит. Но почему это пометит меня как ошибку, когда я пытаюсь заменить нулевое значение существующим. Я не вызываю метод с нулевым значением.
EDIT
Полный код:
int sourceLength = source.length(); // Length of a CharSequence
int targetLength = target.length(); // Length of a CharSequence
Matrix distanceMatrix[][] = new Matrix[sourceLength][targetLength];
for (int row = 1; row < sourceLength; row += 1) {
distanceMatrix[row][0] = new Matrix( // The error is marked at this line.
distanceMatrix[row - 1][0].cost + option.getDeletionCost(),
row - 1,
0
);
}
for (int column = 1; column < targetLength; column += 1) {
distanceMatrix[0][column] = new Matrix(
distanceMatrix[0][column - 1].cost + option.getInsertionCost(),
0,
column - 1
);
}
for (int row = 1; row < sourceLength; row += 1) {
for (int column = 1; column < targetLength; column += 1) {
// do more stuff.
}
}
Матричный класс (который находится внутри основного класса):
public final static class Matrix {
public int cost;
public int row;
public int column;
public Matrix(int cost, int row, int column) {
this.cost = cost;
this.row = row;
this.column = column;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Matrix)
return (cost == ((Matrix)obj).cost
&& row == ((Matrix)obj).row
&& column == ((Matrix)obj).column);
return (super.equals(obj));
}
}
Следы стека:
Exception in thread "main" java.lang.NullPointerException
at net.azzerial.gt.core.Fuzzy.distance(Fuzzy.java:54)
at net.azzerial.gt.core.Fuzzy.levenshteinDistance(Fuzzy.java:24)
at net.azzerial.gt.Test.main(Test.java:15)