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