【问题标题】:Solving a Word Maze Using Recusion (Java)使用递归解决单词迷宫 (Java)
【发布时间】:2018-03-13 06:22:48
【问题描述】:

所以,我对 Java 非常 非常 新手,并且我已经研究这个问题一段时间了。这是一个学校项目(已逾期约 2 周),我正在寻找可以从这一点指导我的提示或一些可能的解决方案。

这个程序的目的是获取一个 .txt 文件(像这样:https://pastebin.com/hvg0P2Pe)并通过一个 2D 字母网格来找到提供的单词;单词可以水平、垂直和对角连接。这个程序的问题是它不能使用迭代来完成,它必须递归完成。

这是以下代码的输出: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) {

        }

    }

}

【问题讨论】:

    标签: java arrays recursion maze


    【解决方案1】:

    这行导致异常:

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

    如果将 charAt(c) 替换为 charAt(0),它应该会更好

    【讨论】:

    • 这一行是找到最后一个字母的基本情况;如果你往下看,那条线就在那里。我不知道如何识别最后一个字母,所以我把 c 放在那里。
    猜你喜欢
    • 2014-12-11
    • 2014-05-07
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    相关资源
    最近更新 更多