У меня есть программа, которая должна искать «ruby», «python» и «java» в головоломке поиска слов. Мой профессор дал мне код для поиска слева направо, но я не уверен, как идти справа налево и по диагонали. Я видел, как другие люди кодируют одну и ту же проблему, но я думаю, что мой профессор хочет, чтобы я сделал это аналогичным методом, который она сделала.Поиск справа налево и по диагонали в поиске слов - Java
Я попытался перейти справа налево, но я либо получаю исключение из списка, либо поиск возвращается отрицательным.
public static void main (String[] argv)
{
char[][] puzzle = {
{'n', 'o', 'h', 't', 'y', 'p', 's'},
{'m', 'i', 'a', 'r', 'y', 'c', 'c'},
{'l', 'l', 'e', 'k', 's', 'a', 'h'},
{'r', 'u', 'b', 'y', 'v', 'm', 'e'},
{'e', 'h', 'h', 'a', 'l', 'l', 'm'},
{'p', 'c', 'j', 'n', 'i', 'c', 'e'},
{'r', 'e', 'e', 'k', 'b', 'i', 'p'}
};
String result1 = findWordLefttoRight (puzzle, "ruby");
String result2 = findWordRighttoLeft (puzzle, "python");
//String result3 = findWordBottomLefttoTopRight (puzzle, "java");
System.out.println (result1);
System.out.println (result2);
//System.out.println (result3);
}
/*Given by Professor*/
static String findWordLefttoRight (char[][] puzzle, String word)
{
// First convert the String into a char array.
char[] letters = word.toCharArray();
// Now try every possible starting point in the puzzle array.
for (int i=0; i<puzzle.length; i++) {
for (int j=0; j<puzzle[i].length; j++) {
// Use (i,j) as the starting point.
boolean found = true;
// Try to find the given word's letters.
for (int k=0; k<letters.length; k++) {
if ((j+k >= puzzle[i].length) || (letters[k] != puzzle[i][j+k])) {
// Not a match.
found = false;
break;
}
}
// If we went the whole length of the word, we found it.
if (found) {
return "String " + word + " found in row=" + i + " col=" +j;
}
}
}
return "String " + word + " not found";
}
/* My attempt at going from right to left */
static String findWordRighttoLeft (char[][] puzzle, String word)
{
// First convert the String into a char array.
char[] letters = word.toCharArray();
// Now try every possible starting point in the puzzle array.
for (int i=puzzle.length; i>0; i--) {
for (int j=puzzle.length; j>0; j--) {
// Use (i,j) as the starting point.
boolean found = true;
// Try to find the given word's letters.
for (int k=0; k<letters.length; k++) {
if ((j+k <= puzzle.length) || (letters[k] == puzzle[i][j+k])) {
// Not a match.
found = false;
break;
}
}
// If we went the whole length of the word, we found it.
if (found) {
return "String " + word + " found in row=" + i + " col=" +j;
}
}
}
return "String " + word + " not found";
}
Итак, в чем вопрос? – sashkello
Для поиска справа налево по диагонали. – YazanLpizra
Задача № 1: индексы массивов нумеруются от 0 до длины-1. Итак, для (int j = puzzle.length; j> 0; j--) должно быть для (int j = puzzle.length-1; j> = 0; j--). Могут быть и другие проблемы, но вам нужно сформулировать вопрос с конкретной проблемой, а не просить исправить свой код. – sashkello