用两个循环打印

问题描述:

我想从两个单独的数组中使用两个for循环打印出X和Y坐标。每个点都减少或增加。网格空间是500x500。我应该基本上结束与输出显示星号的行或者向上或向下。数组正确填充,并且X和Y坐标正确递减或递增。我无法得到它的工作....用两个循环打印

填充板方法填充b1数组与点的x成员和b2数组与点的y成员。

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

你的populateBoard方法的第三个参数有什么作用? – aydinugur

+1

什么是输入(方法参数)和预期输出? – Pshemo

+0

你应该使用1个循环而不是2个? –

在上面的代码的逻辑是这样的假设:你的双循环的I/J次迭代你会遇到一个点,其X/Y值恰好是正好等于I/J, 。

工作溶液是如下

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); 

它产生以下的(正确的)输出:

...... 
.■..■. 
...... 
.■..■. 
.■■■■. 
...... 

尝试这个。

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