因此,对于我正在研究的这个java项目,我需要一个循环,从中心首先读取2d数组,然后是4个adjecent值然后是其中的角,并继续这样做直到它到达并完成最外层。我需要它来处理所有奇数尺寸的方形2d阵列。我制作了这张图片来阐明我的目标:http://gyazo.com/80ed4502cb16795d37b75a14ee57f565。我个人无法实现这一目标。感谢您的时间!任何一段伪代码或java代码都是受欢迎的!
答案 0 :(得分:0)
您可以在逻辑上重新定义网格,使中心为0,0。 然后,根据距中心的距离对每个网格坐标进行排序。 这假设网格是奇数宽度。
例如:
class Point
{
int x;
int y;
}
Point gridCenter;
Comparator<Point> comparator = new Comparator<Point>()
{
@Override
public int compare(Point arg0, Point arg1)
{
int x = arg0.x - gridCenter.x;
int y = arg0.y - gridCenter.y;
int distance0 = x*x + y*y;
x = arg1.x - gridCenter.x;
y = arg1.y - gridCenter.y;
int distance1 = x*x + y*y;
return distance0 - distance1;
}
};
void test()
{
int width = 11;
int height = 13;
gridCenter = new Point();
gridCenter.x = width/2;
gridCenter.y = height/2;
List<Point> points = new ArrayList<>();
for(int x=0;x<width;x++)
{
for(int y=0;y<height;y++)
{
Point p = new Point();
p.x = x;
p.y = y;
points.add(p);
}
}
Collections.sort(points, comparator);
for(Point p : points)
{
System.out.println(p.x + "," + p.y);
}
}
如果你想保证它在排序中选择左边,顶边右边,底边,你可以略微偏向中心。