嵌套for循环 - 处理(java)

时间:2015-10-13 16:35:52

标签: java for-loop processing nested-loops

我的任务是绘制一个10 x 10轮的网格。每个都应该是一个随机的颜色,并有很多像真正的轮子一样的轮辐。我必须使用嵌套for循环来做到这一点。

我已经得到了下面的代码但由于某种原因它绘制了一个10 x无限网格。我不明白为什么外循环应该只运行10次。

float XPos = 25;
float YPos = 25;
float Radius = 20;

void setup() {
    size(500, 500);
}

void draw() {
    for (int h = 0; h < 10; h++) {
        for (int i = 0; i < 10; i++) {
            float RanR = random(250);
            float RanG = random(250);
            float RanB = random(250);

            stroke(RanR, RanG, RanB);
            ellipse(XPos, YPos, Radius * 2, Radius * 2);

            for (int j = 0; j < 360; j += 10) {
                stroke(RanR, RanG, RanB);
                line(XPos, 
                     YPos, 
                     XPos + Radius * sin(radians(j)), 
                     YPos + Radius * cos(radians(j))
                    );
            }

            XPos += Radius * 2;
        }

        XPos = 25;
        YPos += Radius * 2;
    }
}

2 个答案:

答案 0 :(得分:2)

draw()功能每秒自动调用60次。您已将XPosYPos变量保存在draw()函数之外,因此您在draw()函数中对它们所做的任何更改都会在下次保留draw() {1}}被调用。

您可以在for循环中创建它们,而不是将XPosYPos变量保存在草图的顶层,而是将它们基于h和{{1 }}:

i

请注意,这会导致您的圆圈以每秒60次的随机颜色重绘。您可以使用randomSeed()功能每次获取相同的随机数,也可以在float Radius = 20; void setup() { size(500, 500); } void draw() { for (int h = 0; h < 10; h++) { for (int i = 0; i < 10; i++) { float XPos = 25+40*h; float YPos = 25+40*i; float RanR = random(250); float RanG = random(250); float RanB = random(250); stroke(RanR, RanG, RanB); ellipse(XPos, YPos, Radius * 2, Radius * 2); for (int j = 0; j < 360; j += 10) { stroke(RanR, RanG, RanB); line(XPos, YPos, XPos + Radius * sin(radians(j)), YPos + Radius * cos(radians(j)) ); } } } } 结束时调用noLoop(),以便不会再次自动调用它。

答案 1 :(得分:0)

您的代码看起来不错,但draw必须可重入。 也就是说,在第二次被调用时,它应该开始在同一位置绘制。

所以(除了Radius),字段应该保持在draw方法的本地。

void draw() {
    float XPos = 25;
    float YPos = 25;
    float Radius = 20;

在真实的GUI中,只要必须更新屏幕,就会调用draw或paint方法。

我的猜测:不止一次调用draw。

顺便说一句。 Java约定是对字段,局部变量和方法使用初始小写字母:xPos,yPos,radius。