Решение лабиринта слов с помощью повторения (Java)

Итак, я очень новичок в 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) {

        }

    }

}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
142
1

Ответы 1

Эта строка вызывает исключение:

if (letter[r][c] == words.charAt(c))

Если вы замените charAt (c) на charAt (0), он должен работать лучше

Эта строка является базовым случаем, когда найдена последняя буква; если вы посмотрите ниже, эта линия там. Я не знаю, как определить, какая буква последняя, ​​поэтому поставил c.

papageorge 13.03.2018 19:45

Другие вопросы по теме