我是一个刚开始在大学学习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比例尺的大小,但这是行不通的。我试图问我的朋友,但是他们也不知道。
这是问题的屏幕截图:
抱歉,我的英语不好,因为我不是母语人士。如果您能回答,请对我保持简单,因为我刚刚开始学习编码。谢谢。
哦,另一件事。我正在根据这本书进行学习: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);