这件代码(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递增的循环,如他人所提到的。