将2D数组缩放两倍

时间:2019-02-05 21:41:48

标签: java arrays scaling

该程序假定将每个单元格中容纳对象的数组缩放两倍。例如,数组:

[[Object1,Object2],
 [Object3,Object4]]

应成为:

[[Object1,Object1,Object2,Object2],
 [Object1,Object1,Object2,Object2],
 [Object3,Object3,Object4,Object4],
 [Object3,Object3,Object4,Object4]]

这是到目前为止我对该程序拥有的代码:

public Color[][] doOperation(Color[][] imageArray)
{
    int multiplier = 2;  
    Color[][] newArray = new Color[imageArray.length*2][imageArray[0].length*2];

    for(int i = 0; i < imageArray.length; i++)
        for(int j = 0; j < imageArray[0].length; j++)
        {
            newArray[i][j] = imageArray[i/multiplier][j/multiplier];
        }
}

如何更改此代码,以便正确缩放新数组?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

您应该遍历newArray,而不是imageArray

示例:

    int[][] oldArray = new int[2][2];
    int k = 1;
    for(int i = 0; i < oldArray.length; i++)
        for(int j = 0; j < oldArray[0].length; j++)
            oldArray[i][j] = k++; 

    int[][] newArray = new int[oldArray.length*2][oldArray[0].length*2];

    for(int i = 0; i < newArray.length; i++)
        for(int j = 0; j < newArray[0].length; j++)
            newArray[i][j] = oldArray[i/2][j/2];

    System.out.println(Arrays.deepToString(oldArray));
    System.out.println(Arrays.deepToString(newArray));

输出:

[[1, 2], [3, 4]]
[[1, 1, 2, 2], [1, 1, 2, 2], [3, 3, 4, 4], [3, 3, 4, 4]]

答案 1 :(得分:2)

您混合使用了newArrayimageArray。您初始化了两倍大小的newArray(这是正确的),然后使用imageArray的长度对其进行迭代。只需将imageArray.length交换为newArray.length。并且不要忘记return;)

public static Color[][] doOperation(Color[][] imageArray) {
    int multiplier = 2;
    Color[][] newArray = new Color[imageArray.length*2][imageArray[0].length*2];

    for(int i = 0; i < newArray.length; i++)
        for(int j = 0; j < newArray[0].length; j++) {
            newArray[i][j] = imageArray[i/multiplier][j/multiplier];
        }
    return newArray;
}