#java
#java
Вопрос:
новичок здесь я написал код для поиска слов в головоломке, но поиск слов, похоже, ничего не возвращает после запуска программы. я сохранил словарь в двоичном дереве. мне нужно сверить каждую комбинацию символов с той, что есть в моем дереве.Не могли бы вы, пожалуйста, помочь. Спасибо….
это метод решения
public String solve()
{
int row = puzzle.length;
int coloumns = puzzle[0].length;
this.foundWords = new ArrayList<String>();
if (this.dictionary == null)
return null;
for (int i = 0; i < this.puzzle[0].length; i)
{
for (int j = 0; j < this.puzzle.length; j)
{
if (this.getWord(i, j, 0, 1) == null)
continue;
if(this.inDictionary(this.getWord(i,j,0,1)))
this.foundWords.add(getWord(i,j,0,1).concat("n" this.mapDirection(0)));
for(int d = 0; d<8; d)
{
int n = 2;
String word = this.getWord(i,j,d,n);
while(word !=null)
{
if(this.inDictionary(word))
this.foundWords.add(word.concat("n" this.mapDirection(d)));
word = this.getWord(i,j,d,n);
n ;
}
}
}
}
String temp = "";
for(int i= 0; i < foundWords.size(); i )
{
temp = temp.concat(foundWords.get(i));
}
return temp;
}
это получает слово..
public String getWord(int row, int column, int d, int length)
{
if (length < 1)
return null;
d %= 8;
StringBuilder rBuild = new StringBuilder();
rBuild.append(this.puzzle[row][column]);
length--;
while (length >= 0)
{
if ((d == 3) || (d == 4) || (d == 5))
column--;
if ((d == 1) || (d == 0) || (d == 7))
column ;
if ((d == 1) || (d == 2) || (d == 3))
row--;
if ((d == 5) || (d == 6) || (d == 7))
row ;
if ((row < 0) || (row >= this.puzzle.length)
|| (column < 0) || (column >= this.puzzle[0].length))
return null;
rBuild.append(this.puzzle[row][column]);
length--;
}
return rBuild.toString();
}
для направления..
public String mapDirection(int direction)
{
direction %=8;
switch(direction)
{
case 0: return " right";
case 1: return " up and right";
case 2: return " up";
case 3: return " up and left";
case 4: return " left";
case 5: return " down and left";
case 6: return " down and left";
case 7: return " down and right";
}
return null;
}
Комментарии:
1. Что вы видите, когда просматриваете свой код?
2. когда я запускаю поиск, ничего не происходит, никаких исключений, никаких строк не отображается, просто ничего. если я отредактирую temp и изменю его на строку, я увижу строку, так что это говорит мне, что найденные слова кажутся пустыми.
3. Разве среда разработки не позволяет вам пошагово просматривать ваш код построчно?? Если это не так, добавьте кучу функций ведения журнала, чтобы увидеть, куда это идет и над чем оно работает.
Ответ №1:
Вы могли бы взглянуть на подход, принятый в Jumble
, который реализует первый алгоритм, показанный здесь. Это быстрее и масштабируется лучше, чем подход с перестановкой (второй).
Ответ №2:
Я думаю, что в getWord
этой строке:
while (length >= 0)
должно быть
while (length > 0)
Комментарии:
1. Действительно? Изменение должно уменьшить количество повторений цикла. Какая строка вызывает исключение OOB?
2. @user938295 — Что-то не так. В этой строке нет доступа к массиву, так как же там может быть исключение OOB?