Проблема при извлечении четных столбцов из 2D-массива - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь извлечь записи из ДАЖЕ столбцов из заданного 2D-массива.

Код, который я написал:

public static void main(String[] args) {

        int [][] rearra = new int[5][3];
       int[][] arra = { {01,02,03,04,05,06},
                        {11,12,13,14,15,16},
                        {21,22,23,24,25,26},
                        {31,32,33,34,35,36},
                        {41,42,43,44,45,46}};

       rearra = method(arra);
       for(int i=0; i<rearra.length; i++)
       {
           for(int j=0; j<rearra[0].length; j++)
           System.out.println(rearra[i][j]);
       }

    }
    static int[][] method(int [][] arr)
    {
        int temp = 3;
        int [][] narra = new int[5][3];
        //int nrow=0;
        int ncol=0;

        for (int row=0; row<5; row++){
            for (int col=0; col<6; col++)
            {
                    if ((arr[row][col]) % 2 == 0) {
                        narra[row][ncol] = (arr[row][col]);
                        ncol++;
                    }
            }
        }
        return narra;
}

Теперь вывод, который я хочу получить из этого кода, должен выглядеть следующим образом:

02 04 06
12 14 16
22 24 26
32 34 36
42 44 46

Может кто-нибудь подсказать мне, в чем проблемав моей программе?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Move int ncol = 0;внутри внешней петли:

    for (int row=0; row<5; row++){
        int ncol=0;
        for (int col=0; col<6; col++)
        {
0 голосов
/ 03 декабря 2018

Ваша идея в целом хороша, но вы также должны стремиться писать чистый и понятный код.Я предоставлю вам пример, который работает для любого размера массива и хорошо его печатает.

  • Все три ваших основных действия были извлечены в свои собственные методы, и благодаря этому вы можете запускать его с любым массивом.
  • Имена переменных были заменены значимыми, чтобы другие люди (и вы иногда в будущем) могли лучше понять, что происходит.
  • Метод извлечения четных столбцов проверяет длину каждогострока, которая не должна быть одинаковой для всех строк.
  • Работает, проверяя, является ли индекс столбца четным, и если да, вставляется в соответствующее место в новом массиве.

Я надеюсь, что вы улучшите свои навыки, проанализировав этот пример, удачи!

Полный код:

public class ArrayExample {

     public static void main(String[] args) {
        int[][] arr = initializeArray();
        int[][] evenColumnsOnly = getEvenColumns(arr);
        printArray(evenColumnsOnly);
    }

    static int[][] initializeArray() {
        int[][] arr = { {01,02,03,04,05,06},
                        {11,12,13,14,15,16},
                        {21,22,23,24,25,26},
                        {31,32,33,34,35,36},
                        {41,42,43,44,45,46}};
        return arr;
    }

    static void printArray(int[][] arrayToPrint) {
        for(int i = 0; i < arrayToPrint.length; i++) {
            for(int j = 0; j < arrayToPrint[i].length; j++) {
                System.out.print(String.format("%d\t", arrayToPrint[i][j]));
            }
            System.out.println();
        } 
    }

    static int[][] getEvenColumns(int [][] arr)
    {
        int [][] evenColumnsOnlyArray = new int[arr.length][];

        for (int row = 0; row < arr.length; row++) {
            int rowSize = arr[row].length / 2;
            evenColumnsOnlyArray[row] = new int[rowSize];

            for (int col = 0; col < arr[row].length; col++) {
                if(col % 2 == 0  && col / 2 < rowSize) {
                    evenColumnsOnlyArray[row][col / 2] = arr[row][col];
                }
            }
        }

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