从2D阵列提取偶数列时出现问题

时间:2018-12-03 11:19:50

标签: java arrays multidimensional-array

我正在尝试从给定的2D数组中提取EVEN列的条目。

我写的代码是:

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 :(得分:1)

您的想法通常是好的,但是您也应该努力编写简洁易懂的代码。我将为您提供适用于任何数组大小的示例,并将其很好地打印出来。

  • 您的三个主要动作都被提取到各自的方法中,因此您可以使用任何数组来运行它。
  • 变量名称已被有意义的名称替换,以便其他人(有时您将来也会)可以更好地了解正在发生的事情。
  • 提取偶数列的方法检查每一行的长度,不必对所有行都相同。
  • 通过检查列索引是否偶数来工作,如果是,则将其插入新数组中的适当位置。

希望您能通过分析此示例来提高自己的技能,祝您好运!

完整代码:

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;
    }
}

答案 1 :(得分:1)

移动int ncol = 0;内部外循环:

    for (int row=0; row<5; row++){
        int ncol=0;
        for (int col=0; col<6; col++)
        {