Java将2维数组传递给方法并返回1维

时间:2013-10-22 15:26:48

标签: java arrays multidimensional-array parameter-passing

我想将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,为什么?

2 个答案:

答案 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. 如果你有一个二维数组,每个数组的大小分别为4和8,你将总共有32个元素。因此,如果要复制所有元素,则需要将目标数组的大小设置为32。
  2. 在静态方法中,您只访问每个数组的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];
        }
    }