java数组为什么可以迭代吗_Java中的迭代数组

我有包含黑色和白色像素的数据BufferedImage,它以这样的二维数组表示

protected int[][] arr = {{1,1,1,1,1,0,0},

{1,0,0,0,1,0,0},

{1,0,0,0,1,0,0},

{1,1,1,1,1,0,0},

{0,0,0,0,0,0,0}};

数组值为1表示像素为白色,黑色像素为0。

我想创建一个值得跟踪数组1并将被跟踪的数组转换为0的程序,如下所示:

第一次迭代:

0111100

1000100

1000100

1111100

0000000

第二次迭代:

0011100

1000100

1000100

1111100

0000000

第三:

0001100

1000100

1000100

1111100

0000000

第四:

0000100

1000100

1000100

1111100

0000000

第五 :

0000000

1000100

1000100

1111100

0000000

第六名:

0000000

1000000

1000100

1111100

0000000

直到最后一次迭代,所有数组值都将为0。

我做了一个这样的程序:

public void cekNearby()

{

/* for(int y=0;y

{

for(int x=0;x

{

*/

int x=0,y=0;

if(arr2[y][x] ==1)

{

startPointX = x;

startPointY = y;

int moveNextX=x,tempX = arr.length;

int moveNextY=y,tempY = arr[0].length;

arr2[y][x]=0;

while(startPointX!= tempX || startPointY != tempY)

{

System.out.println("MoveNextX->"+moveNextX+"moveNextY->"+moveNextY+"tempX ->"+tempX+" tempY ->" +tempY +" StartpointX->"+startPointX +" startPointY ->"+startPointY );

int moveY = max(0,moveNextY-1) ;

ketemu = false;

System.out.println("Atas"+moveNextX +""+moveNextY);

while(moveY <= min(arr2.length-1,moveNextY+1) && ketemu == false)

{

System.out.println("ASD"+moveY);

int moveX = max(0,moveNextX-1);

while(moveX <=min(arr2[0].length-1,moveNextX+1) && ketemu == false)

{

System.out.print(" Y :" + moveY);

System.out.print(" X :"+moveX);

if(arr2[moveY][moveX]==1)

{

arr2[moveY][moveX]=0;

tempX = moveX;

tempY = moveY;

moveNextX = moveX;

moveNextY = moveY;

ketemu = true;

System.out.print("Ketemu");

}else

{

ketemu = false;

}

moveX++;

}

moveY++;

System.out.println();

}

print_array(arr2);

}

}

}

但是,完成迭代后,这些位置会有白色像素。

0000000

0000000

0000000

1000100

0000000

我的逻辑有什么问题?

任何建议将不胜感激。

您面临什么问题?

从我的源代码中可以看到,搜索是通过在数组数组startpointX附近找到1,startpointY从start到y-1到y +1,然后x-1到x +1的循环方式完成的,问题是当搜索时 index位于(2,4)的数组等于1,表示检测到数组索引(3.3)应该为(3,4)。 那么当搜索位于(3,1)索引等于1时(2,0)应该为(3,0)

对不起,英语不好。 问题是当搜索索引位于(2,4)数组等于1时,即检测到索引(3.3)应该为(3,4)。 那么当搜索位于(3,1)索引等于1时(2,0)应该为(3,0)

看一眼您的输出,似乎您使用了8个单元的邻域; 您似乎只想删除一个1像素的"游程",因此这是正确的:

11100  01100  00100  00000  00000  00000  00000

10101  10101  10101  10101  10001  10001  00001

11101  11101  11101  11101  11101  10101  10101

在底部像素之前检查左下像素,在左像素之前检查左上像素。 如果只想成直角,则需要使用四个邻域。 在每种情况下,右侧的断开连接都将保留。

如果要同时具有直角和对角线,则必须优先选择一个角度。 按照以下顺序检查周围的像素:

516

2 3

748

如果要删除所有相邻的单元格,而不仅仅是一次连接的单元格,则可能需要使用Floodfill算法。

感谢Floodfill算法解决了我的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值