2015-11-14 39 views
1

我需要一个给定输入二维数组{{1,2},{3,4}}和(int)row = 2的方法; (int)列= 3,将产生级联的二维数组{{1,2,1,2,1,2} {3,4,3,4,3,4}}。2D Array Concatenation

我的尝试是使用嵌套for循环来水平和垂直扩展它们,但不成功。这是我到目前为止有:

int row = 2; 
    int column = 5; 
    int count = 0; 
    int[][] list = {{12,3},{3,4}}; 

    int [][] renewed = new int[row*list.length][column*list[0].length]; 

    for (int l = 0; l<list.length; l++) { 
     for (int k = 0; k<renewed.length; k+= list.length) { 
      renewed[l+k] = list[l]; 
     } 
    }   

    System.out.println(Arrays.deepToString(renewed));  
    } 
} 

^这就产生名单[] []放大纵,第一列

int row = 2; 
    int column = 4; 
    int[][] list = {{12,3},{3,4}}; 

    int [][] renewed = new int[row*list.length][column*list[0].length]; 
    for (int i = 0; i<list[0].length; i++) { 
     for (int j = 0; j<renewed[0].length; j+=list[0].length) { 
      renewed[0][j+i] = list[0][i]; 
     } 
    } 

    System.out.println(Arrays.toString(renewed[0]));  
} 

^这就产生名单[] []扩建水平,为第一排;

那么我怎样才能连接这两种方法,以产生一种方法,扩大水平和垂直两个

+0

输入3将如何生成大小为5的数组? –

+0

我只是测试了不同的值。您可以忽略我使用的特定值,因为我正在寻找一个通用答案,而不是针对此特定数组定制的一个答案。 –

+0

但这并没有帮助实际解决问题。你想如何精确修改原始数组? –

回答

2

我认为最简单的方法是迭代新数组中的每个位置,并使用余数运算符%来获取原始的正确条目。

int[][] list = {{1,2},{3,4}}; 
int row = 2; 
int column = 5; 
int [][] renewed = new int[row*list.length][column*list[0].length]; 
for (int i = 0; i < renewed.length; i++) { 
    for (int j = 0; j < renewed[0].length; j++) { 
     renewed[i][j] = list[i % list.length][j % list[0].length]; 
    } 
} 
System.out.println(Arrays.deepToString(renewed)); 
+0

你是男人!谢谢。 –

+0

@mathlover没问题。很高兴我能帮上忙。 –