Я полагаю, что в вашей программе есть несколько ошибок, поэтому я не рассматриваю все из них.
Так что в первом из них не вычисляется последний столбец,…
tableArray
на 2 ячейки больше в каждом измерении, чем длина слова (6 на 5 в вашем первом примере), но цикл, в котором вы заполняете таблицу, проходит только от 0 до длины каждого слова (5 на 4).Поэтому последняя строка и последний столбец не заполняются.Я подозреваю, что вы также вводите неправильные значения в таблицу.Возможно, вы где-то не используете правильные индексы.Вам нужно исправить это и , чтобы цикл выполнялся на одну итерацию дольше.
… а во 2-й он просто не работает.
При заполнении таблицы в итерации, где i
равно 2, а j
равно 3, когда вы выполняете Integer.valueOf(tableArray[i - 1][j])
, эта ячейка таблицы имеет значение null, в результате чего Integer.valueOf
выдает NumberFormatException
.Эта клетка - tableArray[1][3]
- не должна была быть нулевой, так почему?Строка 1 должна была быть заполнена выше, в этом цикле:
for (int k = 1; k < tableArray.length-2; k++) {
int tmp = k;
tableArray[1][k] = String.valueOf(tmp-1);
}
Но граница tableArray.length-2
неверна.На этот раз таблица 5 на 6, поэтому bpoundary равен 5 - 2 = 3, поэтому заполнены только ячейки 0, 1 и 2, где вы хотели, чтобы ячейки 3, 4 и 5 тоже были заполнены.Кстати, граница в следующем цикле for
также неверна.
Советы по проектированию
Используйте только одну таблицу, ваш private int[][] table
, в вашем классе.Не используйте локальные таблицы в ваших методах.Если вам проще иметь таблицу строк в вашем методе printTable
, это нормально, но заполняйте ее из таблицы в классе, а не заново вычисляйте все ее содержимое.Это будет намного проще.
Это требует, чтобы таблица в классе была заполнена (рассчитана), конечно.Я полагаю, что эта строка в конструкторе должна была сделать это?
Levenshtein.table(word1, word2);
Но это не так, потому что метод table
тоже работает на своей собственной таблице, а не private int[][] table
,Вы можете легко это исправить, хотя, присваивая возвращаемое значение из метода table
переменной table
(путая, что переменная и метод имеют одно и то же имя, вы также можете изменить это).