我正在尝试编写一个程序,显示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);
}
}
请非常感谢任何提示或建议
答案 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()。