嵌套循环处理(java)

嵌套循环处理(java),java,for-loop,processing,nested-loops,Java,For Loop,Processing,Nested Loops,我的任务是绘制一个由10 x 10个轮子组成的网格。每个都应该是一个随机的颜色,并有像一个真正的车轮辐条很多。我必须使用嵌套for循环来实现这一点 我已经得到了下面的代码,但出于某种原因,它绘制了一个10倍的无限网格。我不明白为什么外部循环只能运行10次 float XPos = 25; float YPos = 25; float Radius = 20; void setup() { size(500, 500); } void draw() { for (int h =

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

我已经得到了下面的代码,但出于某种原因,它绘制了一个10倍的无限网格。我不明白为什么外部循环只能运行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;
    }
}
float XPos=25;
浮动YPos=25;
浮动半径=20;
无效设置(){
大小(500500);
}
作废提款(){
对于(int h=0;h<10;h++){
对于(int i=0;i<10;i++){
浮动RanR=随机(250);
浮动范围=随机(250);
浮动RanB=随机(250);
冲程(RanR、RanG、RanB);
椭圆(XPos,YPos,半径*2,半径*2);
对于(int j=0;j<360;j+=10){
冲程(RanR、RanG、RanB);
生产线(XPos,
YPos,
XPos+半径*sin(弧度(j)),
YPos+半径*cos(弧度(j))
);
}
XPos+=半径*2;
}
XPos=25;
YPos+=半径*2;
}
}

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

因此(除了半径之外),字段应该保持在绘图方法的局部

void draw() {
    float XPos = 25;
    float YPos = 25;
    float Radius = 20;
在真实GUI中,每当屏幕必须更新时,就会调用draw或paint方法

我猜:抽签不止一次

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

每秒自动调用
draw()
函数60次。您正在
draw()
函数外部保存
XPos
YPos
变量,因此在
draw()
函数内部对它们所做的任何更改都将在下次调用
draw()
时保持不变

您可以在for循环内创建
h
i
变量,而不是在草图的顶层保存
xpo
YPos
变量:

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))
          );
      }
    }
  }
}
浮动半径=20;
无效设置(){
大小(500500);
}
作废提款(){
对于(int h=0;h<10;h++){
对于(int i=0;i<10;i++){
浮子XPos=25+40*h;
浮动YPos=25+40*i;
浮动RanR=随机(250);
浮动范围=随机(250);
浮动RanB=随机(250);
冲程(RanR、RanG、RanB);
椭圆(XPos,YPos,半径*2,半径*2);
对于(int j=0;j<360;j+=10){
冲程(RanR、RanG、RanB);
生产线(XPos,
YPos,
XPos+半径*sin(弧度(j)),
YPos+半径*cos(弧度(j))
);
}
}
}
}

请注意,这将导致您的圆以每秒60次的随机颜色重新绘制。您可以使用该函数每次获取相同的随机数,也可以在
draw()
末尾调用
noLoop()
,这样就不会再次自动调用该函数。

您必须显示这些方法
stroke
line
的作用?另外,对于s,您有三个嵌套的
,因此在一个简单的数学中,您有10*10*36(360/10)yes笔划确定线条的颜色。线画线。内部for循环重复36次以绘制辐条,完成后将转到下一个循环。我不明白为什么要打印无限圈,也许你应该发布所有代码,但要小心,只发布你认为是的代码important@JorgeCampos这是处理,而不是严格的Java。这些不是用户定义的方法,而是处理API中的方法。这就是所有的代码,结果是绘制void被反复执行,从而生成无限的rowshow。它被多次调用了吗?因为
line
eliple
函数调用?谢谢你,我取出了void设置和void draw,所以代码只运行一次,它给了我一个10 x 10的网格。thank alot“在setup()之后直接调用,draw()函数会连续执行其块中包含的代码行,直到程序停止或调用noLoop()”–这不是真的。
draw()
函数不必是可重入的。在这种特殊情况下,这是一种可能的解决方案,但Processing的
draw()
函数根本不必是可重入的。谢谢,它也可以工作,而且更好。我只需要删除draw void,这样代码就不会repeat@Will那可能不是个好主意。改用
noLoop()