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
相关产品推荐
相关产品推荐

