在 char 数组中实现随机词时遇到问题

Trouble with implementing random words in a char array

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

输入行数

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();
            }
        }
    }
}

我相信下面的方法会奏效(如您所料,我还没有尝试过)。

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

填完所有单词后,在所有没有字母的字段中随机输入一个字母。

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

编辑:要随机选择一个字母,而不是长长的 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];
}