您将获得一个2D数组作为字符串和一个单词通过键盘 . 这个词可以是任何方式(所有8个邻居都要考虑)但你不能在匹配时使用相同的两个字符 . 将单词的第一个和最后一个字符的索引返回为(x,y) . 如果未找到匹配则返回-1 .
这就是问题所在 . 我在搜索方面遇到了麻烦 . 我试过了:
int x=0,y=0;
for(int f=0; f<WordinArray.length; f++){
for(int i=0; i<matrix.length; i++){
for(int j=0; j<matrix[0].length; j++){
if(matrix[i][j].equals(WordinArray[f])){
x=i; y=j;
System.out.print("("+x+","+y+")");
}
}
}
}
但是,该代码没有按预期工作 . 我怎么能写这个搜索代码?
4 回答
参考Sixie's code
假设这是您程序的有效输入/输出?
我编辑了你的代码,所以它应该适用于这个表单上的输入(目前它区分大小写,但可以通过设置
.toLowerCase()
轻松更改我认为在开始编写代码之前需要更仔细地规划算法 . 如果我这样做,我的算法可能看起来像这样 .
(1)遍历数组,寻找单词的第一个字符 .
(2)每次找到第一个字符时,检查所有8个邻居,看看是否有第二个字符 .
(3)每当我发现第二个字符作为第一个字符的邻居时,沿着数组中的字符迭代,向正确的方向移动,并根据单词检查每个字符 .
(4)如果我匹配了整个单词,那么打印出我找到匹配的地方并停止 .
(5)如果我到达了网格的边缘,或者发现了一个不匹配的字符,那么继续循环(2)的下一次迭代 .
一旦确定算法,请考虑如何将每个步骤转换为代码 .
如果我理解你的问题是对的 . 这是我现在快速回答的问题 .
我用来检查所有8个邻居的一个小技巧是使用两个for循环来创建所有方向:
这创造了
注意:除了0,0之外的所有内容(您不想重新访问同一个单元格) . 其余的代码只是遍历字符矩阵,虽然你要查找的单词的整个长度,直到你找到(或者你没有找到)完全匹配 .