Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嵌套循环以创建棱锥体_Java_Swing_Loops_Nested - Fatal编程技术网

Java 嵌套循环以创建棱锥体

Java 嵌套循环以创建棱锥体,java,swing,loops,nested,Java,Swing,Loops,Nested,我想知道是否有人能帮我解决这个问题。我一直在尝试使用嵌套for循环显示棱锥体,但我只能使第一行(基本行)正常工作。假设金字塔底部有10个矩形,随着它的增加,矩形数减少到9、8、7、6等等。我已经看了好几天了,没有运气 谢谢大家! public class Legos2 extends JFrame { private int startX; private int startY; private int legoWidth; private int legoHeight; private int

我想知道是否有人能帮我解决这个问题。我一直在尝试使用嵌套for循环显示棱锥体,但我只能使第一行(基本行)正常工作。假设金字塔底部有10个矩形,随着它的增加,矩形数减少到9、8、7、6等等。我已经看了好几天了,没有运气

谢谢大家!

public class Legos2 extends JFrame {
private int startX;
private int startY;
private int legoWidth;
private int legoHeight;
private int baseLength;
private int arcWidth;
private int arcHeight;

// Constructor
public Legos2() {
    super("Jimmy's LEGOs");
    startX = 20;
    startY = 300;
    legoWidth = 50;
    legoHeight = 20;
    baseLength = 10;
    arcWidth = 2;
    arcHeight = 2;
}

// The drawings in the graphics context
public void paint(Graphics g) 
{

    // Call the paint method of the JFrame
    super.paint(g);


    int currentX = startX;
    int currentY = startY;

    //row = 0 is the bottom row
    for (int row = 1; row <= baseLength; row++)
    {   
        currentX = currentX + legoWidth;
        if (row % 2 == 0)
            g.setColor(Color.blue);
        else
            g.setColor(Color.red);
        System.out.println(row);


        for (int col = 0; col <= baseLength; col++)
        {
            System.out.println(col);
            g.fillRoundRect(currentX, currentY, legoWidth, legoHeight, arcWidth, arcHeight);

        }
        //currentY = currentY - legoHeight;
    }
}

// The main method
public static void main(String[] args) {
    Legos2 app = new Legos2();
    // Set the size and the visibility
    app.setSize(700, 500);
    app.setVisible(true);
    // Exit on close is clicked
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
公共类Legos2扩展JFrame{
私人int startX;
私人int startY;
列高维兹私人酒店;
私人乐高;
专用整数基长;
私有宽度;
私家车;
//建造师
公共立法2(){
超级(“吉米的乐高”);
startX=20;
startY=300;
legoWidth=50;
乐高=20;
基长=10;
弧宽=2;
arcHeight=2;
}
//图形上下文中的图形
公共空间涂料(图g)
{
//调用JFrame的绘制方法
超级油漆(g);
int currentX=startX;
int currentY=startY;
//row=0是最下面一行

对于(int row=1;row而言,当前Y值应在外部循环的每次迭代中递减:对于每一行,您希望从较低的Y值重新开始。因此,您应该取消对该行的注释

//currentY = currentY - legoHeight;
currentX必须在每列之后递增,因此必须在内部循环结束时递增,而不是在外部循环开始时递增。在进入内部循环之前,必须将其重置为当前行的起始X位置

如果将currentX重置为startX,您将得到一堵砖墙。但您需要一个金字塔。因此,在外部循环的每次迭代中,内部循环应该少迭代一次,并且在外部循环的每次迭代后,startX也应该增加:

    for (int row = 1; row <= baseLength; row++) {
        currentX = startX;
        if (row % 2 == 0) {
            g.setColor(Color.blue);
        }
        else {
            g.setColor(Color.red);
        }
        System.out.println("row = " + row);


        for (int col = 0; col <= baseLength - row; col++) {
            System.out.println("col = " + col);
            g.fillRoundRect(currentX, currentY, legoWidth, legoHeight, arcWidth, arcHeight);
            currentX = currentX + legoWidth;
        }
        currentY -= legoHeight;
        startX += legoWidth / 2;
    }

for(int row=1;row非常感谢!!你对java资源有什么建议我应该去看看。我教授的教学风格是只看幻灯片,我整个学期都在努力自学。“有效的java”Josh Bloch写的是一本很棒的书,但是如果你还在逻辑、算法和语法方面苦苦挣扎的话,可能有点太高级了。最好的学习方法是练习。有时候,离开屏幕,用笔和纸可以节省很多时间。