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

Java Processing:for循环双初始化条件添加及指定位置火柴绘制问题

问题解答

1. 在Java Processing中为for循环添加第二个初始化条件

Processing基于Java语法,要给for循环添加多个初始化条件,只需在循环的初始化部分用逗号分隔多个变量的声明或赋值即可,示例如下:

// 同时初始化两个变量i和j
for (int i = 0, j = 10; i < 5; i++) {
  println("i: " + i + ", j: " + j);
  j--;
}

注意:初始化的变量需为同一数据类型,若类型不同,需提前在循环外声明变量。

2. 解决火柴绘制异常问题

问题根源

原代码存在两个关键问题:

  • 内层for循环末尾多了一个分号;,导致循环体为空,后续大括号内的绘制代码仅在循环结束后执行一次;
  • 位置计算用dist * posX,当posX=250时,计算出的坐标远超画布宽度(500),火柴被绘制到画布外,视觉上呈现“无法绘制”的效果。

修复方案(不修改numPile相关判断条件)

只需移除内层循环的多余分号,并调整位置计算逻辑,让火柴从传入的posX位置开始按固定间距排列:

void drawMatchPile(int posX, int posY,int matchW, int matchH,int numPile)
{
    matchW= 10;
    matchH = 50;
    int matchSpacing = 15; // 火柴间的横向间距,可按需调整
    int dist;
    ellipseMode(RECT); 
           
    for(numPile= numPile+1; numPile > 0; numPile --)
    {
        // 移除内层循环末尾的分号
        for(dist =1; (dist < numPile); dist++)
        {
            fill(255, 0, 0); 
            // 调整位置:从posX起始,按固定间距排列
            ellipse( posX + dist * matchSpacing, posY, matchW+2, matchH * 0.4); 
            fill(#D3C11C); 
            rect( posX + dist * matchSpacing, posY+matchH * 0.35,matchW,matchH); 
        }
    }
}

修复说明

  1. 移除分号后,内层循环会正常遍历dist值,每次循环都执行绘制逻辑;
  2. 改用posX + dist * matchSpacing计算位置,确保火柴从指定的posX开始向右排列,不会因posX值过大导致坐标超出画布。

内容的提问来源于stack exchange,提问作者Johannes Diestel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:35:18