Résoudre un Labyrinthe de Mots en utilisant Recusion (Java)


Donc, je suis très très nouveau sur Java, et je travaille sur ce problème depuis un certain temps maintenant. C'est pour un projet scolaire (qui est en retard depuis environ 2 semaines) et je cherchais des conseils ou des solutions possibles qui pourraient me guider à partir de ce point.

Le but de ce programme est de prendre dans un .fichier txt (quelque chose comme ceci: https://pastebin.com/hvg0P2Pe) et passer par une grille 2D de lettres afin de trouver les mots fournis; les mots peuvent être connectés horizontalement, verticalement et en diagonale. Le hic pour ce programme est qu'il ne peut pas être fait en utilisant l'itération, il doit être fait récursivement.

Voici la sortie pour le code suivant: https://pastebin.com/uXiDHjvU

Je ne sais pas vraiment quel est le problème avec mon programme; je me gratte la tête depuis des jours. Tout soutien serait grandement apprécié.

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) {

        }

    }

}
Author: papageorge, 2018-03-13

1 answers

Cette ligne provoque une exception:

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

Si vous remplacez charAt (c) par charAt (0), cela devrait mieux fonctionner

 0
Author: Alexander Anikin, 2018-03-13 08:10:36