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[newR][j] = array2D[i][j];
newR++; // Use next row in newArray
}
}
return newArray;
}
}
|