嵌套循环处理(java)
我的任务是绘制一个由10 x 10个轮子组成的网格。每个都应该是一个随机的颜色,并有像一个真正的车轮辐条很多。我必须使用嵌套for循环来实现这一点 我已经得到了下面的代码,但出于某种原因,它绘制了一个10倍的无限网格。我不明白为什么外部循环只能运行10次嵌套循环处理(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 =
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()
。