嵌套 for 循环 - 处理 (java)

nested for loop - Processing (java)

我的任务是绘制一个 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;
    }
}

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

因此(除了 Radius),字段应保留在绘制方法的本地。

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

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

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

顺便说一句。 Java 惯例是对字段、局部变量和方法使用首字母小写:xPos、yPos、radius。

draw()函数每秒自动调用60次。您将 XPosYPos 变量保存在 draw() 函数之外,因此您在 draw() 函数中对它们所做的任何更改都将在下一次 [=11] =] 被调用。

与其将 XPosYPos 变量保存在草图的顶层,不如在 for 循环中创建它们并将它们基于 hi:

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))
          );
      }
    }
  }
}

请注意,这会导致您的圆圈每秒以随机颜色重新绘制 60 次。您可以使用 randomSeed() 函数每次都获得相同的随机数,或者您可以在 draw() 末尾调用 noLoop() 以便它不会自动再次调用。