我正在编写一个从文本文件中扫描的单词搜索程序。文本文件包含两个整数(拼图的尺寸,在本例中为10x10),然后是拼图,接着是另一个整数(要查找的单词数量),最后是要找到的单词。我正在尝试编写代码,以便程序将执行一个for循环,它将扫描下一行,然后将字符串中的每个字符添加到2D数组。然而,扫描仪继续似乎继续通过文件,并最终在文件上“超出范围”,即使,根据for循环,它应该运行不超过10次(拼图的尺寸是10x10)
以下是有问题的代码:
Scanner scan = new Scanner(new File("puzzle.txt"));
int rows = scan.nextInt();
int columns = scan.nextInt();
int [][] wordSearch = new int[rows][columns];
for (int i = 0; i < rows; i++){
for (int j = 0; j < columns; j++){
String temp = scan.nextLine();
for (int k = 0; k < temp.length(); k++){
wordSearch[i][j] = temp.charAt(k);
}
}
}
这是puzzle.txt:
答案 0 :(得分:3)
然而,扫描仪继续似乎继续通过文件并最终“超出范围”文件,即使根据for循环,它应该运行不超过10次(拼图的尺寸为10x10) )
不,看看你的循环:
for (int i = 0; i < rows; i++){
for (int j = 0; j < columns; j++){
String temp = scan.nextLine();
您为每一行和运行它。我怀疑你真的想要:
for (int i = 0; i < rows; i++) {
String temp = scan.nextLine();
for (int j = 0; j < columns; j++) {
wordSearch[i][j] = temp.charAt(j);
}
}
当然,这假设您已经正确地将每行的长度设置为列数 - 您可能希望在读取该行后验证该行。
应该引起怀疑的一件事是这个内循环:
for (int k = 0; k < temp.length(); k++) {
wordSearch[i][j] = temp.charAt(k);
}
这将覆盖wordSearch[i][j]
中每个字符的相同temp
,使除了最后一次迭代之外的所有字符都毫无意义。