Java中成员方法创建数组后main方法无法访问填充的问题
问题分析:无法解析数组变量
ints的原因及解决办法 首先,咱们直接说核心问题:你遇到的"cannot resolve symbol ints"错误,本质是变量作用域的限制。
为什么会出现这个问题?
你在MainClass的createArray()方法里声明的int[] ints是一个方法局部变量——这种变量的可见范围只限于它所在的方法内部。当createArray()方法执行完毕后,这个变量就会被Java的垃圾回收机制标记回收,外部Test类的main方法根本看不到它的存在,编译器自然会报错说找不到这个符号。
怎么解决?
这里有两种常用的修复方案,你可以根据自己的需求选择:
方案一:让createArray()方法返回创建好的数组
把createArray()改成返回int[]类型,这样main方法调用时就能直接拿到数组的引用,后续就能正常使用Arrays.fill了:
import java.util.Arrays; public class MainClass { // 修改方法,返回创建好的int数组 public int[] createArray(){ return new int[10]; } } class Test{ public static void main(String[] args) { MainClass mcl = new MainClass(); // 接收方法返回的数组引用 int[] ints = mcl.createArray(); // 注意:Arrays.fill的endIndex是排他的,要填充整个数组(索引0-9)的话,endIndex写10 Arrays.fill(ints, 0, 10, 8); // 打印验证结果 for (int num : ints) { System.out.println(num); } } }
另外提一句:你原来写的循环调用Arrays.fill完全没必要,Arrays.fill一次就能完成指定范围的填充,循环多次属于重复操作,完全多余。
方案二:把ints定义为类的成员变量
如果这个数组需要在MainClass的多个方法中使用,或者你希望通过类对象来维护这个数组的状态,可以把它声明为类的成员变量:
import java.util.Arrays; public class MainClass { // 声明为类的成员变量,扩大可见范围 private int[] ints; public void createArray(){ // 初始化成员变量 ints = new int[10]; } // 提供get方法让外部访问这个数组 public int[] getInts() { return ints; } } class Test{ public static void main(String[] args) { MainClass mcl = new MainClass(); mcl.createArray(); // 通过get方法获取数组引用 int[] ints = mcl.getInts(); Arrays.fill(ints, 0, 10, 8); for (int num : ints) { System.out.println(num); } } }
额外提醒
关于Arrays.fill的参数:第三个参数endIndex是排他的,也就是说填充的范围是[startIndex, endIndex)。比如你要填充索引0到9的所有元素(整个10长度的数组),就得写Arrays.fill(ints, 0, 10, 8),如果写endIndex=9,那只会填充到索引8的位置,最后一个元素不会被修改。
内容的提问来源于stack exchange,提问作者user10602498
相关产品推荐
相关产品推荐

