You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Processing代码显示静止圆圈的原因及修复方案

问题成因与修复方案

嘿,我来帮你拆解这个问题!

问题到底出在哪?

你这段代码的核心bug是错用了for-each循环。在Processing(基于Java)里,for(int x : xM)这种写法是遍历数组里的元素值,而不是数组的索引。因为你初始化xM和yM时,数组里所有元素默认都是0,所以每次循环时x(或y)的值都是0——这就导致你一直在给xM[0]重复赋值,其他索引位置的元素始终是默认的0,yM也是同样的情况。

最后你用索引遍历画圆圈时,只有z=0的位置xM[0]和yM[0]是被更新过的数值,而z=1到4时,xM[z]和yM[z]都是0,所以最终只会在(0,0)(左上角)和(xM[0], yM[0])(中心附近)画出两个圆圈,就是你看到的结果。

怎么修复?

要实现圆圈沿X、Y轴依次递增排列,你需要改用基于索引的普通for循环来给数组赋值,这样才能逐个给每个索引位置的元素正确赋值。

修复后的代码如下:

void setup(){ 
  size(200,200); 
  background(255); 
} 

void draw(){ 
  ac(); 
} 

void ac(){ 
  int xPos = 10; 
  int yPos = 20; 
  int sizeXY = 40; 
  int xInt = 10; 
  int yInt = 20; 
  int[] xM = new int[5]; 
  int[] yM = new int[5]; 
  
  // 用索引遍历给xM每个位置赋值
  for(int i = 0; i < xM.length; i++){ 
    xM[i] = xPos; 
    xPos += xInt; 
  } 
  
  // 同理处理yM
  for(int i = 0; i < yM.length; i++){ 
    yM[i] = yPos; 
    yPos += yInt; 
  } 
  
  // 遍历索引画出所有圆圈
  for(int z = 0; z < 5; z++){ 
    ellipse(xM[z], yM[z], sizeXY, sizeXY); 
  } 
}

修复逻辑说明:

  • 把原来的for-each循环换成for(int i = 0; i < xM.length; i++),这里的i就是数组的索引,从0到4逐个遍历,每个索引位置的元素都会被单独赋值。
  • xM[i] = xPos会把当前的xPos存入数组第i位,接着xPos += xInt让下一个位置的X坐标递增10;yM的处理逻辑完全一致,Y坐标每次递增20。

运行这段修复后的代码,你就能看到5个圆圈沿X轴从10开始、Y轴从20开始依次排列啦!

内容的提问来源于stack exchange,提问作者A.Lopez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:24:31