как нарезать или скопировать центральную часть матрицы в java - PullRequest
0 голосов
/ 24 января 2020

void cropCenterPart (int a[][],int rows,int cols) → Эта функция должна извлекать центральную часть и печатать из arr, центральная часть включает в себя все, кроме границ (границы включают 1-й ряд, 1-й столбец, последний ряд и последний столбец).

Примечание: в основной функции создана матрица. Я должен использовать эту функцию, передавая подписи

Исходная матрица

1 2 3 4
6 7 8 9
1 1 1 1
6 7 8 9

Матрица с центром.

7 8
1 1

Я также использовал Arrays.copyofRange (массив, начало, конец), но он дает мне ноль или адрес, ничего не будет распечатаны.

Прикрепите код

   public void cropCenterPart(int a[][],int rows,int cols){

        for (int i = 0; i < rows; i++) { 
        for (int j = 0; j < cols; j++) { 
            if (i == 0) 
                System.out.print(a[i][j] + " "); 
            else if (i == rows - 1) 
                System.out.print(a[i][j] + " "); 

            else if (j == 0) 
                System.out.print(a[i][j] + " "); 
            else if (j == cols - 1) 
                System.out.print(a[i][j] + " "); 
            else
                System.out.print("  "); 
        } 
        System.out.println(""); 
    }
    System.out.println("");
   }

Ответы [ 2 ]

1 голос
/ 24 января 2020

Если размеры меньше 3, там нет средней матрицы, попробуйте с кодом,

private static int[][] cropCenterPart(int[][] arr, int row, int col) {
    if (!(row > 2 && col > 2))
        return arr;
    int[][] resultArr = new int[row - 2][col - 2]; // as the first row,col and 
                                                   // last row,col is neglected
    for (int i = 1; i < row-1; i++) {
        System.arraycopy(arr[i], 1, resultArr[i - 1], 0, col - 1 - 1);
    }
    return resultArr;
}

В основной функции (или любой другой функции, из которой вы вызываете), напечатайте так:

int resultArr[][] = cropCenterPart (arr, row, col);
for(int i = 0; i<row-2; i++) {   // here the row is the actual row size of arr
    System.out.println();
    for(int j=0; j<col-2; j++) {
        System.out.print(" " + resultArr[i][j]);
    }
}
0 голосов
/ 29 января 2020

Ответ будет

public class A {

    public void extractBoundaries(int a[][],int rows,int cols){


        for (int i = 0; i < rows; i++) { 
            for (int j = 0; j < cols; j++) { 
                if (i == 0 || j == 0 || i == 3 || j == 3) 
                    System.out.print(a[i][j] + " "); 

                else
                    System.out.print("  "); 
            } 
            System.out.println(""); 
        }
        System.out.println("");
   }
    public void cropCenterPart(int a[][],int rows,int cols){

        for (int i = 0; i < rows; i++) { 
            for (int j = 0; j < cols; j++) { 
                if (i == 0 || j == 0 || i == 3 || j == 3) 
                  System.out.print("  ");
                else

                    System.out.print(a[i][j] + " ");
            } 
            System.out.println(""); 
        }
        System.out.println("");


    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...