我一直致力于一个根据用户输入的单词和参数创建单词搜索的程序。基本上我的想法是创建类似于此的东西:
输入行数
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();
}
}
}
}
答案 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];
}