我想将2维数组传递给方法并返回1维数组
我有这个:
public static int[] Aarray(int[][] array){
System.out.print((array[1][1])+" "); // get 0, but all elements are "8"
}
int [][] matr = new int[4][8];
int [] mas = new int[8];
matr[1][1] = 8;
mas = Aarray(matr);
但这不正确,因为我用数字“8”填写所有数组元素,在方法Aarray() array[1][1]
中填入0
,为什么?
答案 0 :(得分:2)
首先。 Java的命名约定说你应该用小写字母或下划线开始方法,但那不是你的问题......
我在代码中看不到你初始化传递给方法的数组的任何地方,所以我只能假设问题是什么。首先,您的变量“mas”似乎是一个实例变量,而您的方法是静态的。因此,不应该像在剪切代码中那样访问它。剪切原始代码会更有帮助。
但是即使在“mas”是一个静态变量的情况下,我假设除了使用数组类型的对象初始化它之外别无其他。这个包含新的引用,默认情况下,新的引用将由java初始化,值为0.
尝试在此之前初始化每个值:
变量[0] [0] = 8; 变量[0] [1] = 8; ... 变量[0] [7] = 8; 变量[1] [0] = 8; ... 变量[3] [0] = 8;
答案 1 :(得分:1)
您在这里的代码不能是您实际使用的代码,因为它无法编译,但您需要考虑几个问题:
在静态方法中,您只访问每个数组的1索引中的元素。首先,数组是0索引的,所以考虑到这一点。另一方面,如果要复制所有元素,则需要编写某种循环结构。根据您要将它们映射到的顺序(如果重要),您的循环可能看起来不同,但类似于:
for(int i = 0;i < arr.length;i++) {
int jMax = arr[i].length;
for(int j = 0;j < jMax;j++) {
target[i*jMax + j] = arr[i][j];
}
}