首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的Java Boggle代码不工作?

为什么我的Java Boggle代码不工作?
EN

Stack Overflow用户
提问于 2018-07-29 06:33:16
回答 1查看 80关注 0票数 -1
代码语言:javascript
复制
public class coggle {

 public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    HashSet<String> d = new HashSet<>();
    String[][] board = new String[5][5];

    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            board[i][j] = scan.next();
        }
        scan.nextLine();
    }
    String next = "";
    while (scan.hasNextLine()) {
        next = scan.nextLine();
        if ("done".equals(next)) {
            break;
        }
        d.add(next);
    }
    boolean[][] visited = new boolean[5][5];
    ArrayList<String> s = new ArrayList<>();

    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            f(i, j, board, visited, "", d, s);
        }
    }  
}

public static void f(int r, int c, String[][] board, boolean[][] visited, String s, HashSet<String> d, ArrayList<String> words) {
    if (r >= 5 || r < 0) {
        return;
    }if (c >= 5 || c < 0) {
        return;
    }if (visited[r][c]) {
        return;
    }
    s += board[r][c];
    if (d.contains(s) && !words.contains(s)) {
        words.add(s);
        System.out.println(s);
    }
    visited[r][c] = true;

    for (int i = -1; i < 2; i++) {
        for (int j = -1; j < 2; j++) {
            f(r + i, c + j, board, visited, s, d, words);
        }
    }
  }
}

基本上,我只想让程序打印出找到的任何单词。但是,它从不打印任何单词。

它应该在5x5的板上工作,当我输入"done“时,hashset字典的输入就会停止。

EN

回答 1

Stack Overflow用户

发布于 2018-07-29 07:35:26

我没有看到算法有任何错误,所以可能是输入数据使算法不打印任何单词。我修改了代码,对输入数据进行硬编码,而不是从System.in检索数据。

电路板输入:

代码语言:javascript
复制
b | a | r | s | z
z | z | z | z | z
z | z | z | z | z
z | z | z | z | z
z | z | z | z | z

字典输入:barbars

代码语言:javascript
复制
public class Coogle {

    public static void main(String[] args) {
        HashSet<String> d = new HashSet<>(Arrays.asList("bar", "bars"));
        String[][] board = {{"b", "a", "r", "s", "z"}, {"z", "z", "z", "z", "z"}, {"z", "z", "z", "z", "z"}, {"z", "z", "z", "z", "z"}, {"z", "z", "z", "z", "z"}};

        boolean[][] visited = new boolean[5][5];
        ArrayList<String> s = new ArrayList<>();

        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                f(i, j, board, visited, "", d, s);
            }
        }
    }

    public static void f(int r, int c, String[][] board, boolean[][] visited, String s, HashSet<String> d, ArrayList<String> words) {
        if (r >= 5 || r < 0) {
            return;
        }
        if (c >= 5 || c < 0) {
            return;
        }

        if (visited[r][c]) {
            return;
        }

        s += board[r][c];

        if (d.contains(s) && !words.contains(s)) {
            words.add(s);
            System.out.println(s);
        }

        visited[r][c] = true;

        for (int i = -1; i < 2; i++) {
            for (int j = -1; j < 2; j++) {
                f(r + i, c + j, board, visited, s, d, words);
            }
        }

    }
}

算法是打印barbars

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51575744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档