Java:当尝试绘制根据传递的值而变化的正方形时,Square 不断被切断

问题描述 投票:0回答:1

我在使用 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);
        }
    }
}

My output

What it should look like

注意右侧最后一个蓝色方块缺少底线。

我尝试了很多方法,但似乎没有一个对我有用。我最接近拥有完整正方形的时候是在 main 方法中,我将

for (i = 0; i <= n; i++)
更改为
for (i = 0; i < n; i++)
。虽然它确实给了我一个完整的最后一个方块,但它也删除了下面的最后一个红色方块以及右上角的蓝色方块。我不知道我哪里搞砸了。

我将不胜感激任何见解||任何可能的解决方案,谢谢。 (此外,任务描述不允许在蓝色方块上绘制红色方块。)

如果有帮助,这里是 CodeDraw 文档:

java for-loop if-statement methods graphics
1个回答
0
投票

我认为你的代码很好。我认为红色在蓝色之上,所以你看不到它。

这是我创建的示例。

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

输出

© www.soinside.com 2019 - 2024. All rights reserved.