public class ArrayResizer { public static boolean isNonZeroRow( int[][] array2D, int r ) { boolean allNonZero = true; for( int c = 0; c < array2D[0].length; c++) if(array2D[r][c] == 0) allNonZero = false; return allNonZero; } public static int numNonZeroRows( int[][] array2D ) { int numNonZeroRows = 0; for ( int i = 0; i < array2D.length; i++ ) if( isNonZeroRow( array2D, i ) ) numNonZeroRows++; return numNonZeroRows; } public static int[][] resize( int[][] array2D ) { // Trick 2D array definition: need numNonZeroRows in array2D int[][] newArray = new int[numNonZeroRows(array2D)][array2D[0].length]; /* ----------------------------------------------------------- Copy next row from array2D to the row "newR" in newArray ----------------------------------------------------------- */ int newR = 0; for(int i = 0; i < array2D.length; i++) { // ONLY copy row i if it is a non-zero row if( isNonZeroRow(array2D, i) ) { for ( int j = 0; j < array2D[i].length; j++ ) newArray[i][j] = array2D[i][j]; newR++; // Use next row in newArray } } return newArray; } }