Удаление ребер из двумерного массива - PullRequest
2 голосов
/ 01 ноября 2011

У меня есть массив [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 для каждой и вернуть новую строку.Не уверен, что это будет очень эффективно.

Пробовал, но безрезультатно.Следующий тест - вращение и повторное использование кода выше.

1 Ответ

2 голосов
/ 02 ноября 2011

Вот, пожалуйста. Вы не обязательно хотите использовать 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]+" ");
            }
        }
    }
}

Вывод вышеуказанной программы

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 
...