我正在尝试使用两个for循环从两个单独的数组中打印出X和Y坐标。每个点都递减或递增。网格空间为500x500。基本上我应该输出显示一行向上或向下的星号。阵列正确填充,X和Y坐标正确递减或递增。我无法让它发挥作用......
填充板方法使用点的x成员填充b1数组,使用点的y成员填充b2数组。
populateBoard(b1,b2,point);
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix.length; j++) {
if(i == b2[i] && j == b1[j])
System.out.print("*");
else
System.out.print(" ");
}
System.out.println();
}
上述代码中的逻辑错误是什么?然而,当我使用它时它起作用(显然只有一点)。
if(i == b2[0] && j == b1[0])
答案 0 :(得分:0)
上面代码中的逻辑假设在双循环的第i / j次迭代中,您将遇到一个x / y值恰好等于i / j的点。 / p>
工作解决方案如下
private static void populateBoard(int[] xs, int[] ys, int w, int h)
{
Set<Point> points = new HashSet<>();
for(int i=0;i<xs.length;i++)
{
int x = xs[i];
int y = ys[i];
points.add(new Point(x,y));
}
for(int i=0;i<h;i++)
{
for(int j=0;j<w;j++)
{
Point p = new Point(j,i);
if(points.contains(p))
System.out.print("■");
else
System.out.print(".");
}
System.out.print("\n");
}
}
当我针对一个简单的例子运行此代码时:
int[] xs = {1,4,1,4,1,2,3,4};
int[] ys = {1,1,3,3,4,4,4,4};
populateBoard(xs, ys, 6, 6);
它产生以下(正确)输出:
......
.■..■.
......
.■..■.
.■■■■.
......
答案 1 :(得分:0)
试试这个。
boolean[][] temp = new boolean[matrix.length][matrix.length];
for (int i = 0; i < b1.length; ++i)
temp[b2[i]][b1[i]] = true;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix.length; j++)
System.out.print(temp[i][j] ? "*" : " ");
System.out.println();
}