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

Processing自定义类中给变量赋值为ArrayList元素失效问题

问题解决方案

核心原因排查

  • 类成员变量未声明/存在同名局部变量:你贴出的代码中,没有在类作用域下定义x、y、r三个成员变量。如果这三个变量是定义在类外部的全局变量,或是你在update方法内部定义的同名局部变量,类内部的赋值只会修改对应作用域的变量,不会作用到类实例本身的属性,就会出现"赋值不生效"的表现。如果你在类外给实例的x属性赋值可以生效,基本可以确定是类方法内存在同名局部变量导致赋值优先级偏移。
  • 原始类型泛型隐患:你声明xc、yc时仅指定了原始类型ArrayList,没有显式声明泛型为ArrayList<Float>,编译阶段get()方法返回值会被识别为Object类型,部分低版本Processing运行环境下自动拆箱失败会导致赋值语句直接跳过执行。
  • 语法错误阻断执行:print(xc.get(0))语句末尾缺少分号,Processing语法校验不通过时会阻断该行后续代码的执行,你看到的赋值不生效可能只是赋值语句根本没有运行。

修正后的参考代码

// 类名建议首字母大写符合Java/Processing规范
class MyObject {
    // 显式声明三个成员变量,避免和其他作用域变量混淆
    private float x;
    private float y;
    private float r;
    // 显式指定ArrayList泛型为Float
    private ArrayList<Float> yc = new ArrayList<Float>();
    private ArrayList<Float> xc = new ArrayList<Float>();
    
    MyObject(float xer, float yer, float rer){
        xc.add(10.0);
        x = xer;
        y = yer;
        r = rer;
    }
    
    void update(){
        print(xc.get(0)); // 补充分号避免语法错误
        x = xc.get(0);
    }
    
    // 可添加get方法验证x的赋值结果
    float getX(){
        return x;
    }
}

验证方法

实例化类后调用update()方法,再调用类的getX()方法即可拿到赋值后的x值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:24:01