Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_For Loop - Fatal编程技术网

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

Java 在循环中连续添加和删除形状?,java,loops,for-loop,Java,Loops,For Loop,我试图编写一个程序,显示10个随机着色和随机定位的框,但根据分配,“屏幕上只显示最后10个随机框。也就是说,当绘制第11个框时,删除绘制的第一个框。当绘制第12个框时,删除第2个框,依此类推” 我不知道该怎么做,因为我能得到的最远结果是使用for循环来显示10个随机框 这就是我到目前为止所做的: package acm.graphics; import acm.graphics.*; import acm.program.*; import java.awt.*; import java.ut

我试图编写一个程序,显示10个随机着色和随机定位的框,但根据分配,“屏幕上只显示最后10个随机框。也就是说,当绘制第11个框时,删除绘制的第一个框。当绘制第12个框时,删除第2个框,依此类推”

我不知道该怎么做,因为我能得到的最远结果是使用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); 
    }
}
封装acm.graphics;
导入acm图形。*;
导入acm.程序。*;
导入java.awt.*;
导入java.util.Random;
导入javax.swing.*;
公共类ShootingStar扩展图形程序
{
公开募捐
{
最终整数宽度=800;
最终内部高度=600;
最终整型箱宽=50;
最终整型MaxBox=10;
此.setSize(宽度、高度);
随机=新随机();

对于(int i=0;i您只迭代了十次,这只会生成十个框,对吗?让我们从这里开始。maxbox应该大于10(我不知道您试图做什么的细节,所以我不能说maxbox应该是什么)


基本上,您希望将这些框的信息存储在某个位置,然后将最后十项取出。您可以使用一个数组来完成此操作。如果您要推到主数组的末尾,则只需弹出最后十项,然后绘制框。

一种方法是:

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()每当需要添加新矩形时,新矩形将替换最旧的矩形。

您应该真正提到当前代码的问题所在。实现所需的矩形缺少什么?当前它仅显示10个随机框,但不会继续添加和删除框。请在纸上思考此问题。伪代码是什么需要吗?