在循环中连续添加和删除形状?

时间:2013-11-12 01:42:18

标签: java loops for-loop

我正在尝试编写一个程序,显示10个随机颜色和随机分布的框,但根据分配,“只有最后10个随机框将显示在屏幕上。也就是说,当第11个框是绘制,删除绘制的第一个框。当绘制第12个框时,删除第二个框,依此类推“。

我不知道该怎么做,因为我能得到的最远的是使用for循环显示10个随机框。

这是我到目前为止所做的:

package acm.graphics;

import acm.graphics.*;
import acm.program.*;
import java.awt.*;
import java.util.Random;
import javax.swing.*;

public class ShootingStar extends GraphicsProgram
{
    public void run()
    {
        final int width = 800;
        final int height = 600;
        final int boxWidth = 50;
        final int maxBoxes = 10;

        this.setSize(width, height);
        Random random = new Random();

        for( int i = 0; i<=maxBoxes ;i++) {

            float r = random.nextFloat();
            float b = random.nextFloat();
            float g = random.nextFloat();
            Color randColor = new Color(r,g,b);

            GRect r1 = new GRect(boxWidth, boxWidth);
            r1.setFilled(true);
            r1.setColor(randColor);

            GPoint x = new GPoint(random.nextInt(width), 
                                random.nextInt(height));

            add(r1, x);

        }

        this.pause(100); 
    }
}

请非常感谢任何提示或建议

2 个答案:

答案 0 :(得分:0)

你只迭代十次,只生十箱,对吗?我们从那里开始。 maxBoxes应该大于10(我不知道你要做什么的具体细节,所以我不能说maxBoxes应该是什么)

基本上,您希望将这些框的信息存储在某处,然后将最后十个项目拉出来。您可以为此使用数组数组。如果您要推送到主阵列的末尾,那么您只需要弹出最后十个,然后绘制框。

答案 1 :(得分:0)

一种方法是:

public class Test {
private int boxWidth, boxHeight = 50;
private GRect[] rects;
private int first;//keep track of oldest rectangle

public Test()
{
    this.rects = new GRect[10];
    this.first = 0;
}

void drawRects()
{
    //for each rectangle, draw it
}

void addRect()
{
    this.rects[first] = new GRect(boxWidth, boxHeight);
    first++;
    first = first % 10; //keeps it within 0-9 range
}

 }

只要需要添加一个新矩形并且新的矩形将替换最旧的矩形,只需调用addRect()。