gpt4 book ai didi

java - 除非外部循环的值非零,否则 3 个 for 循环的内部不会运行,但仅当在最内部循环内部进行减法时才会运行

转载 作者:行者123 更新时间:2023-12-01 15:03:59 26 4
gpt4 key购买 nike

我知道这是一篇相当长且可能令人困惑的帖子...但我真的不知道是什么原因导致的...所以我尽力解释。我不知道如何简洁地描述问题,这使得我很难寻找其他解决方案。

无论如何,首先介绍一点背景知识。该程序正在读取所有可能的 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 处的字符“a”添加到字符串中,然后将字符“a”添加到该字符串中t' 从位置 x+2 开始。这基本上写为 arr[x+L][y],用于向前搜索单词。然而,我也想找到倒写的单词。为此,我有一个循环添加 arr[x-L][y]。 似乎这个错误仅在我从数组中的索引中减去 L 时发生,并且仅发生在从中减去 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[x-L][y]因此,对于这一点,程序从 arr[1][0] 开始读取。

  • 对角搜索 - 向后和向上

x 和 Y 都有这个错误。由于“DiBU+Puzzle[x-L][y-L]”,x=0 和 y=0 都不会进入循环。所以因此,对于这个程序,程序从 arr[1][1] 开始读取。

编辑:我尝试简单地减去 1(如 B+Puzzle[x-L-1][y] 中所示),但这只会导致它在正确的位置开始,但以一列结束。

TL;DR除非外部两个循环的值大于 0,否则无法读取三个 for 循环中最里面的一个。但是只有当我从所述最里面的 For 循环内的数组索引中减去值时,才会出现此问题。

最佳答案

我认为将向前和向后搜索分开会更简单,至少在一切正常工作之前是这样。一次只做一件事,并且认真地做。

如果 x 为零,则不进行第二次循环的任何迭代的原因在于循环条件:

  for(int L = 0; L < x; L++)

L 永远不会小于 0,因此如果 x 为 0,则永远不会满足条件 L < x,并且循环执行零次迭代。

假设 y 为 0,x 为 2。元素 [2][0]、[1][0] 和 [0][0] 可以是三个字母的单词。对于 L=0 和 L=1,您将只进行两次迭代。

通过将条件更改为 L <= x 再进行一次迭代即可解决这两个问题。

考虑循环条件非常非常重要。在许多简单的情况下,“<”测试是合适的,但并非总是如此。在本例中,L==x 会导致查看您想要的数组的元素 0。

关于java - 除非外部循环的值非零,否则 3 个 for 循环的内部不会运行,但仅当在最内部循环内部进行减法时才会运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13228585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com