Java 从二维阵列中删除边
我有一个数组[300][300],我需要去掉边并用剩余的值填充一个新数组[298][298]。到目前为止,我已经做到了: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];
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