我在使用 Java 中的
CodeDraw
库绘制正方形时遇到问题。我正在尝试在画布上垂直和水平绘制一系列红色和蓝色方块。图片在下面。
但是,我注意到无论我做什么,右侧最后一个蓝色方块的底线总是缺失。
这是我的代码:
import codedraw.CodeDraw;
import codedraw.Palette;
public class Aufgabe5 {
// Constants defining canvas dimensions
private static final double CANVAS_WIDTH = 300.0;
private static final double CANVAS_HEIGHT = 300.0;
private static final double MIN_X = 0.0;
private static final double MAX_X = CANVAS_WIDTH;
private static final double MIN_Y = 0.0;
private static final double MAX_Y = CANVAS_HEIGHT;
private static final double n = 9.0;
private static int i;
public static void main(String[] args) {
CodeDraw myDrawObj = new CodeDraw(300, 300);
double fraction = 0.0;
boolean inRange = (n >= 5 && n <= 19);
boolean isOdd = (n % 2 != 0);
if (inRange && isOdd) {
for (i = 0; i <= n; i++) {
drawSquares(myDrawObj, fraction);
fraction = i / n;
}
} else {
System.out.println("Invalid Input: n has to be an odd number between 5 and 19.");
}
myDrawObj.show();
}
private static void drawSquares(CodeDraw myDrawObj, double fraction) {
double sideLength = CANVAS_WIDTH / n;
myDrawObj.setLineWidth(4);
myDrawObj.setColor(Palette.RED);
myDrawObj.drawSquare(MAX_X * fraction, MAX_Y * fraction, sideLength);
myDrawObj.setLineWidth(2);
myDrawObj.setColor(Palette.BLUE);
myDrawObj.drawSquare(MIN_X, MAX_Y - (MAX_Y * fraction), sideLength);
if (i < n) {
myDrawObj.drawSquare((MAX_X - sideLength), (MAX_Y * fraction), sideLength);
}
}
}
注意右侧最后一个蓝色方块缺少底线。
我尝试了很多方法,但似乎没有一个对我有用。我最接近拥有完整正方形的时候是在 main 方法中,我将
for (i = 0; i <= n; i++)
更改为 for (i = 0; i < n; i++)
。虽然它确实给了我一个完整的最后一个方块,但它也删除了下面的最后一个红色方块以及右上角的蓝色方块。我不知道我哪里搞砸了。
我将不胜感激任何见解||任何可能的解决方案,谢谢。 (此外,任务描述不允许在蓝色方块上绘制红色方块。)
我认为你的代码很好。我认为红色在蓝色之上,所以你看不到它。
这是我创建的示例。
import codedraw.CodeDraw;
import codedraw.Palette;
public class CodeDrawTestArea {
// Constants defining canvas dimensions
private static final double CANVAS_WIDTH = 300.0;
private static final double CANVAS_HEIGHT = 300.0;
private static final double MIN_X = 0.0;
private static final double MIN_Y = 0.0;
private static final double n = 9.0;
public static void main(String[] args) {
CodeDraw myDrawObj = new CodeDraw(300, 300);
boolean inRange = (n >= 5 && n <= 19);
boolean isOdd = (n % 2 != 0);
if (inRange && isOdd) {
drawSquares(myDrawObj, CANVAS_WIDTH / n);
} else {
System.out.println("Invalid Input: n has to be an odd number between 5 and 19.");
}
myDrawObj.show();
}
private static void drawSquares(CodeDraw myDrawObj, double sideLength) {
myDrawObj.setLineWidth(5);
myDrawObj.setColor(Palette.BLUE);
for(int i = 0; i < n; i++)
{
myDrawObj.drawSquare(0, i * sideLength, sideLength);//Left squares
myDrawObj.drawSquare(CANVAS_WIDTH - sideLength, i * sideLength, sideLength);//Right squares
}
myDrawObj.setLineWidth(1);
myDrawObj.setColor(Palette.RED);
for(int i = 0; i < n; i++)
{
myDrawObj.drawSquare(i * sideLength, i * sideLength, sideLength);
}
}
}