我是一个刚开始在大学学习Java的学生。因此,在今天的课程中,我的老师给了我一些作业,其中包括我必须使用StdIn.Draw库编写一个程序,当您键入数字N时,它还会打印出高度和宽度N的NxN棋盘。我决定使用NxN数组,并将某些元素设置为一个值(例如true),将其他元素设置为另一个值。之后,我使用该库绘制与刚创建的阵列相对应的棋盘。看起来像这样:

class chessboard {
 public static void main(String[] args) {
    int N = StdIn.readInt();
    boolean[][] hi = new boolean[N][N];
    double r = 1 / N;
    int x = 0;
    for (int i = 0; i < N; i++){
        for (int j = 0; j < N; j++){

            if ((int)(i+j)%2 == 0)
                hi[i][j] = true;
            else {
                hi[i][j] = false;
            }
        }
    }
    StdDraw.setXscale(0.0, 5.0);
    StdDraw.setYscale(0.0, 5.0);
    int i = 0;
    int j = 0;
    double a = 1.0;
    double b = 1.0;
    while ((a < N) && (i < N)){
        while ((b < N) && (j < N)){
            if (hi[i][j] != true){
                StdDraw.setPenColor(StdDraw.BLACK);
                StdDraw.filledSquare(a ,b, r);
            }
            else {
                StdDraw.setPenColor(StdDraw.RED);
                StdDraw.filledSquare(a ,b, r);
            }
            b = b + r;
            j++;
        }
        b = 1.0;//reset b after the inner while loop
        a = a + r;
        i++;
    }
 }
}


当我测试运行它时,它只会打印出白色的空白屏幕,没有别的。我的算法没有发现任何问题,并且尝试了多次调整初始a和b坐标以及X和Y比例尺的大小,但这是行不通的。我试图问我的朋友,但是他们也不知道。

这是问题的屏幕截图:

java - 我正在尝试用Java绘制NxN棋盘,但会打印出白色的空白屏幕-LMLPHP

抱歉,我的英语不好,因为我不是母语人士。如果您能回答,请对我保持简单,因为我刚刚开始学习编码。谢谢。

哦,另一件事。我正在根据这本书进行学习:http://introcs.cs.princeton.edu/java/home/

最佳答案

由于两个操作数均为int,因此使用整数除法。

double r = 1 / N; // = 0; !!


因此,强制转换操作数,或将其更改为:

double r = 1.0 / N;


同样对于内部while循环,在此处初始化计数器,
您在while循环后重置了b,但未重置j。
使用for循环,可以编写:

double a = 1.0;
for (int i = 0; i < N; ++i) {
    double b = 1.0;
    for (int j = 0; j < N; ++j) {
        StdDraw.setPenColor(hi[i][j] ? StdDraw.RED: StdDraw.BLACK);
        StdDraw.filledSquare(a ,b, r);
        b += r;
    }
    a += r;
}


不确定位置。

BTW

        if ((int)(i+j)%2 == 0)
            hi[i][j] = true;
        else {
            hi[i][j] = false;
        }


变成

        hi[i][j] = (i + j) % 2 == 0;




       if (hi[i][j] != true){
       // Better:
       //if (!hi[i][j]) {
            StdDraw.setPenColor(StdDraw.BLACK);
            StdDraw.filledSquare(a ,b, r);
        }
        else {
            StdDraw.setPenColor(StdDraw.RED);
            StdDraw.filledSquare(a ,b, r);
        }


变成

        StdDraw.setPenColor(hi[i][j] ? StdDraw.RED : StdDraw.BLACK);
        StdDraw.filledSquare(a ,b, r);

09-10 07:04