-3

我一直在开发一个基于用户输入的单词和参数创建单词搜索的程序。基本上这个想法是创建类似的东西:

输入行数

8

输入列数

7

输入字词

然后,该程序将生成一个包含 8 行 7 列的单词搜索,并包含单词 cat 和 dog。该程序将在给定的约束范围内对角、水平和垂直生成这些单词。

我不想要答案或为我做这件事,而是有兴趣被指出正确的方向。

下面附上最新的代码,我要给大家一个思路。

同样,我所要求的只是朝着正确的方向开始。

感谢您的任何帮助!

public void fillArray() {Scanner sc = new Scanner(System.in);

    System.out.println("How many rows would you like? >");
    int row = sc.nextInt();

    System.out.println("How many columns would you like? >");
    int col = sc.nextInt();

    String word = sc.next();
    String testString = word;
    char[] stringToCharArray = testString.toCharArray();

    System.out.println(testString.toCharArray());

    int[][] arrayRC = new int[row][col];

    for (int i = 0; i < row + 1; i++) {
        for (int j = 0; j < col + 1; j++) {
            if (j < col && i < row) {
                arrayRC[i][j] = (int) ((Math.random() * 26) + 1);

                char alphabet;
                switch (arrayRC[i][j]) {
                    case 1:
                        alphabet = 'a';
                        break;
                    case 2:
                        alphabet = 'b';
                        break;
                    case 3:
                        alphabet = 'c';
                        break;
                    case 4:
                        alphabet = 'd';
                        break;
                    case 5:
                        alphabet = 'e';
                        break;
                    case 6:
                        alphabet = 'f';
                        break;
                    case 7:
                        alphabet = 'g';
                        break;
                    case 8:
                        alphabet = 'h';
                        break;
                    case 9:
                        alphabet = 'i';
                        break;
                    case 10:
                        alphabet = 'j';
                        break;
                    case 11:
                        alphabet = 'k';
                        break;
                    case 12:
                        alphabet = 'l';
                        break;
                    case 13:
                        alphabet = 'm';
                        break;
                    case 14:
                        alphabet = 'n';
                        break;
                    case 15:
                        alphabet = 'o';
                        break;
                    case 16:
                        alphabet = 'p';
                        break;
                    case 17:
                        alphabet = 'q';
                        break;
                    case 18:
                        alphabet = 'r';
                        break;
                    case 19:
                        alphabet = 's';
                        break;
                    case 20:
                        alphabet = 't';
                        break;
                    case 21:
                        alphabet = 'u';
                        break;
                    case 22:
                        alphabet = 'v';
                        break;
                    case 23:
                        alphabet = 'w';
                        break;
                    case 24:
                        alphabet = 'x';
                        break;
                    case 25:
                        alphabet = 'y';
                        break;
                    case 26:
                        alphabet = 'z';
                        break;
                    default:
                        alphabet = '-';
                        break;
                }
                System.out.print(alphabet);

            } else {
                System.out.println();
            }
        }
    }
}
4

1 回答 1

0

我相信以下方法会起作用(您可以猜到,我还没有尝试过)。

我会使用 2D 数组char,而不是int. 每个字段的初始值为'\0',我们将使用它。我会先输入单词,然后再随机填充字母。要填写一个单词,首先选择一个随机方向或方向(垂直、水平或对角线)。我不清楚你想要 3、5 还是 8 个方向,但只要你知道…… 方向对单词的开始位置设置了一些限制,例如,长度为 3 的水平单词可能从底行开始,但是距右边缘至少 3 个位置;垂直词不能从底部开始。从可能的方块中选择一个随机的起始方块。查看是否与已填写的字母有冲突。请记住:如果字段已包含“c”或“\0”,则您可以在字段中填写“c”,而不是如果它包含另一个字母。只有当单词中没有字母冲突时,填写所有字母。如果发生冲突,请尝试另一个起始方格。如果在尝试 100 次之后您仍然无法填写单词,请放弃并告诉用户您无法填写所有单词。

填写完所有单词后,在所有尚未包含字母的字段中放置一个随机字母。

一个问题是,最后填写的随机字母可能会意外地拼写,比如 cat 在另一个地方,所以它会在那里结束两次。决定你是否可以忍受。

编辑:要随机选择一个字母,而不是你长的 switch 语句,我会推荐类似的东西

private static final char[] LETTERS = "abcdefghijklmnopqrstuvwxyz".toCharArray();
private static final Random RAND = new Random();

private static char getRandomLetter() {
    int randomIndex = RAND.nextInt(LETTERS.length);
    return LETTERS[randomIndex];
}
于 2016-11-17T08:07:25.553 回答