Итак, я очень новичок в Java, и я уже некоторое время работаю над этой проблемой. Это для школьного проекта (который просрочен примерно на 2 недели), и я искал подсказки или некоторые возможные решения, которые могли бы помочь мне с этого момента.
Цель этой программы - взять файл .txt (что-то вроде этого: https://pastebin.com/hvg0P2Pe) и пройти через двумерную сетку букв, чтобы найти предоставленные слова; слова можно соединять по горизонтали, вертикали и диагонали. Загвоздка этой программы в том, что это нельзя сделать с помощью итераций, это нужно делать рекурсивно.
Вот результат для следующего кода: https://pastebin.com/uXiDHjvU
Я не совсем уверен, в чем проблема с моей программой; Я уже несколько дней чешу затылок. Любая поддержка будет принята с благодарностью.
import java.io.*;
import java.util.*;
public class wordMaze1 {
private static boolean wordCheck;
public static boolean wordSearch(char[][] letter, String words, int r, int c) {
if (letter[r][c] != words.charAt(0))
return false;
if (letter[r][c] == words.charAt(c))
return true;
if (letter[r][c] == words.charAt(0)) {
letter.toString().toLowerCase();
return wordSearch(letter, words.substring(1), r, c - 1);
} else if (letter[r][c] == words.charAt(0)) {
letter.toString().toLowerCase();
return wordSearch(letter, words.substring(1), r, c + 1);
} else if (letter[r][c] == words.charAt(0)) {
letter.toString().toLowerCase();
return wordSearch(letter, words.substring(1), r - 1, c);
} else if (letter[r][c] == words.charAt(0)) {
letter.toString().toLowerCase();
return wordSearch(letter, words.substring(1), r + 1, c);
} else if (letter[r][c] == words.charAt(0)) {
letter.toString().toLowerCase();
return wordSearch(letter, words.substring(1), r - 1, c - 1);
} else if (letter[r][c] == words.charAt(0)) {
letter.toString().toLowerCase();
return wordSearch(letter, words.substring(1), r + 1, c - 1);
} else if (letter[r][c] == words.charAt(0)) {
letter.toString().toLowerCase();
return wordSearch(letter, words.substring(1), r - 1, c + 1);
} else if (letter[r][c] == words.charAt(0)) {
letter.toString().toLowerCase();
return wordSearch(letter, words.substring(1), r + 1, c + 1);
}
return false;
}
public static void main(String[] args) {
try {
Scanner scan = new Scanner(new File("maze.txt"));
int numGrids = Integer.parseInt(scan.nextLine());
for (int i = 1; i < numGrids + 1; i++) {
System.out.println("Grid #" + i + ":");
int size = Integer.parseInt(scan.nextLine());
char[][] grid = new char[size][size];
String[] tempGrid = new String[size];
for (int t = 0; t < size; t++) {
tempGrid[t] = scan.nextLine();
System.out.println(tempGrid[t]);
}
int wordNum = Integer.parseInt(scan.nextLine());
String[] words = new String[wordNum];
for (int w = 0; w < wordNum; w++) {
words[w] = scan.nextLine();
for (int r = 0; r < size; r++) {
System.out.println();
for (int c = 0; c < size; c++) {
grid[r][c] = tempGrid[r].charAt(c);
System.out.print(grid[r][c]);
if (grid[r][c] == words[w].charAt(0))
if (wordSearch(grid, words[w], r, c)) {
wordCheck = true;
break;
}
}
//System.out.print(grid);
}
System.out.println();
if (wordCheck == true)
System.out.println(words[w] + " is found.");
else
System.out.println(words[w] + " is NOT found.");
}
System.out.println();
}
} catch (FileNotFoundException e) {
}
}
}




Эта строка вызывает исключение:
if (letter[r][c] == words.charAt(c))
Если вы замените charAt (c) на charAt (0), он должен работать лучше
Эта строка является базовым случаем, когда найдена последняя буква; если вы посмотрите ниже, эта линия там. Я не знаю, как определить, какая буква последняя, поэтому поставил c.