在char数组中实现随机单词的麻烦

时间:2016-11-17 07:06:10

标签: java wordsearch

我一直致力于一个根据用户输入的单词和参数创建单词搜索的程序。基本上我的想法是创建类似于此的东西:

输入行数

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

1 个答案:

答案 0 :(得分:0)

我相信以下内容会奏效(您可以猜测,我还没有尝试过)。

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

在填写所有单词后,在所有尚未收到字母的字段中随机填写一个字母。

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

编辑:要随机选择一个字母,而不是你长的切换语句,我建议像

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];
}