这是我的代码的预期输出:

这是我的代码:

import java.awt.*;

public class CafeWall
{
    final static int MORTAR = 2;
    final static int WIDTH  = 650;
    final static int HEIGHT = 400;

    public static void main( String[] args )
    {
        StdDraw.setCanvasSize(WIDTH, HEIGHT);
        StdDraw.setXscale(0, WIDTH);
        StdDraw.setYscale(0, HEIGHT);

 // Change from Color.GRAY to change background color.
        StdDraw.setPenColor( Color.GRAY );
        StdDraw.filledRectangle(WIDTH/2, HEIGHT/2, WIDTH/2, HEIGHT/2);

 drawRow(    0, 378, 4, 20 );
 drawRow(   50, 300, 5, 30 );

 drawGrid(  10, 36, 4, 25, 0 );

 drawGrid( 250, 40,  3, 25, 10 );

 drawGrid( 425, 2, 5, 20, 10 );

 drawGrid( 400, 234,  2, 35, 35 );
    }

    // Draw a row of squares, the total number of squares is pairs * 2
    // (x, y) is the lower left corner of the first box
    public static void drawRow( int x, int y, int pairs, int size )
    {
      StdDraw.setPenColor(Color.BLACK);
      StdDraw.filledRectangle(x, y, size, size);
      StdDraw.setPenColor(Color.BLUE);
      StdDraw.line(x, y, x+size, y+size);
      StdDraw.line(x, y+size, x+size, y);
      StdDraw.setPenColor(Color.WHITE);
      StdDraw.filledRectangle(x+size, y, size, size);
    }

    // Draw a grid of 2 * pairs rows
    public static void drawGrid( int x, int y, int pairs, int size,
     int offset )
    {
      int startingX = x;
      for(int line = 1; line <= pairs; line++) {
        if(line % 2 ==1) { //if line is odd
          x = startingX;
        } else { //else line is even and must be shifted by offset specified
          x = startingX + offset;
        }
        for(int i = 1; i <= pairs; i++) {
          drawRow(x, y, pairs, size);
          x = x + 2*size;
        }

        y = y + size + MORTAR;
      }
    }


}

问题:
  • 我的行没有正确偏移
  • 我的蓝色“x”没有显示。

  • 我一直盯着这个看了好几个小时。我似乎无法弄清楚哪里出了问题。谁能提供一些指导?

    (附加说明)
    对于那些想知道的人,这是此代码的实际输出:

    最佳答案

    drawRow()有两个重要的问题:

  • 您没有在drawRow中将矩形正确居中
  • 您没有在drawRow
  • 中正确重复配对

    该方法应如下所示:
    public static void drawRow( int x, int y, int pairs, int size ) {
        // loop for each pair.
        for (int i = 0; i < pairs; i++) {
            StdDraw.setPenColor(Color.BLACK);
            // Note the correct centering of the rectangles
            StdDraw.filledRectangle(x + size/2, y + size/2, size / 2, size/2);
            StdDraw.setPenColor(Color.BLUE);
            StdDraw.line(x, y, x+size, y+size);
            StdDraw.line(x, y+size, x+size, y);
            StdDraw.setPenColor(Color.WHITE);
            // Note the correct centering of the rectangles
            StdDraw.filledRectangle(x+size+size/2, y + size/2, size / 2, size/2);
            // advance to the next pair.
            x += size * 2;
        }
    }
    

    drawGrid()方法中,您应该有一个附加的rows参数,该参数指示要绘制的行数。我已经修改了该方法,使其看起来像:
    public static void drawGrid( int x, int y, int rows, int pairs, int size,
            int offset )
    {
        int startingX = x;
        for(int line = 0; line < rows; line++) {
            x = startingX + (line % 2) * offset;
            drawRow(x, y, pairs, size);
    
            y = y + size + MORTAR;
        }
    }
    

    注意(line % 2) * offset的“聪明”用法。图一出。

    放在一起,并更改某些行的大小,我有main方法调用:
        drawRow(    0, 378, 4, 20 );
        drawRow(   50, 300, 5, 30 );
    
        // Bottom left
        drawGrid(  10, 36, 4, 4, 20, 0 );
    
        // bottom mid
        drawGrid( 250, 40, 6, 3, 25, 10 );
    
        // bottom right
        drawGrid( 425, 2, 10, 5, 16, 8 );
    
        // top right
        drawGrid( 400, 234, 4, 2, 35, 35 );
    

    和我的结果看起来像:

    这些并不是您所做的巨大改变,这里和那里只是一点点逻辑。

    10-08 02:01