Java中如何返回与原数组类型不同的新数组?代码问题求助
搞定Java数组类型转换与静态变量访问问题
嘿,我来帮你拆解下当前遇到的两个问题,咱们一步步解决:
首先解决静态变量非静态访问+数组初始化语法错误
你代码里的raceValues是静态变量,它属于Marathon这个类本身,而不是每个Marathon实例。所以在构造方法里用this.raceValues去访问是错误的——this指代当前实例,而静态变量不属于实例。另外,Java里初始化二维数组的语法也不对,不能直接写[aValue][aValue],得用new int[aValue][aValue]。
如果raceValues是每个Marathon实例独有的数据,那应该把static修饰符去掉,改成实例变量:
public class Marathon { // 改成实例变量,每个Marathon对象有自己的raceValues int[][] raceValues; public Marathon(int aValue){ // 正确初始化二维数组 raceValues = new int[aValue][aValue]; } }
如果raceValues确实是所有Marathon实例共享的静态数据,那初始化的时候不要用构造方法(构造方法是创建实例时执行的),可以用静态代码块,构造方法里不要用this访问它:
public class Marathon { static int[][] raceValues; // 静态代码块初始化静态变量 static { raceValues = new int[5][5]; } public Marathon(int aValue){ // 修改静态变量时直接用类名访问 Marathon.raceValues = new int[aValue][aValue]; } }
核心需求:返回Marathon类型的新数组
要返回Marathon类型的数组,逻辑很简单——先创建指定大小的Marathon[]数组,然后逐个初始化数组里的每个Marathon实例就行。比如写一个方法来生成并返回这个数组:
public class Marathon { int[][] raceValues; public Marathon(int aValue){ raceValues = new int[aValue][aValue]; } // 示例方法:返回指定大小的Marathon数组 public static Marathon[] createMarathonArray(int arraySize, int valuePerMarathon) { // 创建Marathon类型的数组,指定长度 Marathon[] marathonArray = new Marathon[arraySize]; // 遍历数组,初始化每个Marathon实例 for (int i = 0; i < arraySize; i++) { marathonArray[i] = new Marathon(valuePerMarathon); } // 返回这个新数组 return marathonArray; } // 测试验证 public static void main(String[] args) { Marathon[] myMarathons = createMarathonArray(3, 2); for (Marathon m : myMarathons) { System.out.println(m.raceValues.length); // 输出3次2,验证每个实例的数组大小 } } }
这样就能得到一个类型为Marathon的新数组,每个元素都是初始化好的Marathon实例啦~
内容的提问来源于stack exchange,提问作者smacaz
相关产品推荐
相关产品推荐

