Java 从二维阵列中删除边

Java 从二维阵列中删除边,java,arrays,copy,2d,edge-detection,Java,Arrays,Copy,2d,Edge Detection,我有一个数组[300][300],我需要去掉边并用剩余的值填充一个新数组[298][298]。到目前为止,我已经做到了: double[][] edging() { double [][] array = new double [data.length] [data[0].length]; array = bubbles(); double [] [] newArray = new double[array.length-2][array[0].length-2];

我有一个数组[300][300],我需要去掉边并用剩余的值填充一个新数组[298][298]。到目前为止,我已经做到了:

double[][] edging() {
   double [][] array = new double [data.length] [data[0].length];
   array = bubbles();   
   double [] [] newArray = new double[array.length-2][array[0].length-2]; 

   System.arraycopy(array,1,newArray, 0, newArray.length);

   array = newArray;
   System.out.println( + newArray.length);  
   System.out.println( + newArray[0].length);   

   return newArray;
}
这样可以删除顶部和底部边缘。然而,右翼和左翼仍然存在。那里的检查显示新数组是[298][300]

我考虑过写一个循环来依次删除每一行,在每一行上使用arraycopy并返回新行。但不确定这是否会非常有效


我试过了,但没用。下一个测试是旋转它并再次使用上面的代码。

给你。您不一定要使用System.arraycopy(),因为它仍然在O(n^2)运行时执行。在下面的程序中,我没有处理边缘情况,但这应该可以为您解决

class MyClass {
    public static void main(String[] args) {
        MyClass myClass = new MyClass();

        int[][] sampleArray = {{11, 12, 13, 14, 15, 16},
                {17, 18, 19, 20, 21, 22},
                {23, 24, 25, 26, 27, 28},
                {29, 30, 31, 32, 33, 34},
        };

        myClass.removeEdges(sampleArray);
    }


    public int[][] removeEdges(int[][] arrayToTrim){
        int[][] newArray = new int[arrayToTrim.length-2][arrayToTrim[0].length-2];
        print2DArray(arrayToTrim);
        for(int i=1;i<arrayToTrim.length-1;i++){
            for(int j=1;j<arrayToTrim[0].length-1;j++){
                newArray[i-1][j-1] = arrayToTrim[i][j];
            }
        }
        System.out.println();
        print2DArray(newArray);
        return newArray;
    }

    private void print2DArray(int[][] anArray){
        for(int i=0;i<anArray.length;i++){
            System.out.println();
            for(int j=0;j<anArray[0].length;j++){
                System.out.print(anArray[i][j]+" ");
            }
        }
    }
}

谢谢Bragboy。我一定要试试这个。比我刚想到的要优雅得多。我使用arraycopy删除顶部和底部边缘,将其旋转90度,重复arraycopy,然后将其旋转回来。笨重可怕,我很惊讶它居然奏效了。@Oliver Burdekin:虽然它奏效了,但Arraycopy在运行时间上是一种昂贵的方法。请尽量避免。是的,刚刚测试并确认。你是个天才。再次感谢你,布拉格博伊!
11 12 13 14 15 16 
17 18 19 20 21 22 
23 24 25 26 27 28 
29 30 31 32 33 34 

18 19 20 21 
24 25 26 27