java for and loops没有预期的工作



这件代码(Java)不起作用,我不知道为什么。

int[][] arr = {{0, 0, 0}, {0, 1, 0}, {0, 0, 0}};
for(int a = 0; a < arr.length; a++) {
   for(int b = 0; b < arr[a].length;) {
      int c = 1;
      if (arr[a][b] == 0) {
         while((arr[a][(b+c)] == 0) && ((b+c)!=(arr[a].length-1))) {
            c++;
         }
         addBar(b, a, c); // Use these values in another function...
         b = b + c;
      } else {
         b++;
      }
   }
}

问题:b < arr[a].length;不会再次受到尊重并再次循环。我在做什么错?

您正在称呼:

while ((arr[a][(b + c)] == 0) && ((b + c) != (arr[a].length - 1)))

隐藏在其中的arr [a] [(b c)],c总是等于1。因此,您的b == 2在最后一个循环开始时,一切都很好,它进入循环,并且您正在访问B C元素(2 1),但是内部数组中只有3个元素,最大索引不应大于2!

有您的错误。第一个循环:

  int c = 1;//b==0
  if (arr[a][b] == 0) {//arr[0][0] - correct
     while((arr[a][(b+c)] == 0) && ((b+c)!=(arr[a].length-1))) {
        c++; //c == 2
     }
     addBar(b, a, c); // Use these values in another function...
     b = b + c; //b == 0 + 2 == 2
  } else {
     b++;
  }

第二个循环:

  int c = 1;//b== 2
  if (arr[a][b] == 0) {//arr[0][2] - correct
     while((arr[a][(b+c)] == 0) //ERROR!!! b+c == 3!!!

查看您的第二个循环

for(int b = 0; b < arr[a].length;) {

您应该像这样做

for(int b = 0; b < arr[a].length; b++) {-您忘记了B

for(int b = 0; b < arr[a].length; /*you're not incrementing b*/)

所以B始终为0。将其更改为:

for(int b = 0; b < arr[a].length; b++)

b c离开数组

if(b+c<arr[a].length)
      {
           while((arr[a][(b+c)] == 0) && ((b+c)!=(arr[a].length-1))) 
           {        
               c++;
       }
      } 

我认为您想在循环的情况下这样做

((b+c)!=(arr[a].length-1)))

,但这并不意味着。您仍然可以离开数组。

,您也忘记了 b递增的循环,如他人所提到的。

最新更新