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

Java如何将构造方法中处理的数组传递给其他成员方法访问使用

问题根因

  • 存在变量遮蔽问题:构造方法内部定义的局部String[] values和类成员变量int[] values重名,局部变量优先级更高,解析结果仅存在于构造方法作用域内,未赋值给成员变量
  • 类型不匹配:split()返回的是String数组,无法直接赋值给int类型的成员变量,缺少类型转换步骤
  • 构造方法中this.values = values为无效操作:执行该语句时局部values尚未定义,右值指向未初始化的成员变量本身,无实际意义

修正后代码

IQ类

package IQProgramm;

public class IQ {
    private int values[];
    private double average;

    public IQ(String numbers) {
        // 拆分输入,局部变量改名避免和成员变量重名
        String[] strValues = numbers.split(";");
        System.out.println("Calculate: ");
        System.out.println("You've input the following numbers: ");
        // 初始化成员变量数组长度
        values = new int[strValues.length];
        for (int i = 0; i < strValues.length; ++i) {
            // String转int后赋值给成员变量
            values[i] = Integer.parseInt(strValues[i]);
            System.out.print(values[i] + " ");
        }
        System.out.println("\n");
    }

    public void compute() {
        int sum = 0;
        for (int num : values) {
            sum += num;
        }
        average = (double) sum / values.length;
        System.out.println("IQ平均值:" + average);
    }
}

IQTester类

package IQProgramm;

import java.util.Scanner;

public class IQTester {
    public static void main(String[] args) {
        Scanner readIQ = new Scanner(System.in);
        System.out.println("Please enter your numbers: ");
        String numbers = readIQ.nextLine();
        IQ iq = new IQ(numbers);
        iq.compute();
        readIQ.close();
    }
}

补充说明

如果输入的内容存在非数字字符,Integer.parseInt()会抛出转换异常,可以根据需求新增输入校验逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:36:06