我知道这是一篇很长而且可能令人困惑的帖子……但我真的不知道是什么原因造成的……所以我尽我所能解释。我不知道如何简洁地描述这个问题,这让我很难寻找其他解决方案。
无论如何,首先是一点背景。该程序在所有可能的 8 个方向上读取 2D 数组以查找单词(该程序基本上是一个自动单词查找)。
我有二维数组,我正在搜索它,寻找给定的字符串。为此,我有 3 个循环:
- 第一个循环(循环 x)选择起始 x 坐标
- 第二个循环(循环 y)选择起始 y 坐标
- 最后一个循环(循环 L)从外部循环的 (x,y) 坐标给定的位置开始检查长度为 L 的单词。
但是,在外部循环增加到 1 之前,程序似乎不会进入 L 的循环。因此,我无法开始在第 1 列(x = 0)中搜索单词,第一个被访问的是第 2 列 (x=1)。当其他两个循环中的任何一个的值低于 1 时,就好像有一个 if 语句阻止 for 循环运行。更重要的是,这只发生在我减去数组的索引位置时,而不是当我添加它们时。
为了澄清最后一点,我通过一次将字符添加到字符串来搜索单词。因此,当向前阅读时,三个字母的单词 'cat' 将由位置 x 处的字符串 'c' 组成,然后我们在位置 x+1 处将 char 'a' 添加到字符串中,然后在该字符串中添加 char ' t' 来自位置 x+2。这基本上写为 arr[x+L][y],用于向前搜索一个单词。但是,我也想找到倒写的单词。所以为此我有一个循环添加arr [xL] [y]。似乎这个错误只发生在我从数组中的索引中减去 L 时,并且只发生在减去它的值上(所以对于 [x-1][y],x=0 不会进入for 循环,但 y=0 可以。
这是(缩短的)代码:
public void searchPuzzle(String[][] Puzzle){
//For Each Coordinate X,Y
for(int x=0; x<Puzzle.length; x++){//For each x position
for(int y=0; y<Puzzle[x].length; y++){//For each y position
//RESET or INITAITE strings for searching in all 8 directions
String F="", B="", U="", D="", DiFU="", DiFD="", DiBU="", DiBD="";
//SEARCH FORWARD
for(int L = 0; L < Puzzle.length-x; L++){ //search for word of length L
F = F+Puzzle[x+L][y];
//System.out.println(F);
if(isWord(F)){
//System.out.println(F);
}
}
//SEARCH BACK
System.out.println("X:" + x + " Y: "+y);
for(int L = 0; L < x; L++){ //search for word of
System.out.println("X:" + x + " Y: "+y);
B = B+Puzzle[x-L][y];
System.out.println(B);
if(isWord(B)){
//System.out.println(B);
}
}
System.out.println("--");
//SEARCH DIAGONALLY - BACK & UP
for(int L = 0; L < smaller(x,y); L++){
DiBU = DiBU+Puzzle[x-L][y-L];
if(isWord(DiBU)){
//System.out.println(DiBU);
}
}
- 向前搜索
完美运行(因为 F+Puzzle[x+L][y] 只涉及加法)。所以对于这个程序,它应该从 arr[0][0] 开始读取。
- 搜索返回
有我提到的错误,但只有x值是错误的。这意味着 x=0 永远不会被传递到循环 SEARCH BACK 中,因此循环以 x=1 开始。请注意,代码有 B+Puzzle[xL][y] 所以对于这个程序,程序从 arr[1][0] 开始读取。
- 搜索对角线 - 备份和向上
x 和 Y 都有这个错误。由于“DiBU+Puzzle[xL][yL]”,x=0 和 y=0 都不会进入循环。所以对于这个程序,程序从 arr[1][1] 开始阅读。
编辑:我尝试简单地减去 1(如在 B+Puzzle[xL-1][y] 中),但这只会导致它从正确的位置开始,但会缩短一列。
TL;DR 除非外部两个循环的值大于 0,否则无法读取三个 for 循环的最内层。但只有当我从所述最内层 For 循环内的数组索引中减去值时,才会出现此问题。