使用两个for循环打印

时间:2017-06-20 23:03:38

标签: java

我正在尝试使用两个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])

2 个答案:

答案 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();
}