If there is an array a dimension M x N , then it can be done in cycles as follows
for ( int j = 0; j != N; j++ ) // цикл по столбцам { int k = M; for ( int i = M; i != 0; i-- ) // цикл по строкам для выбранного столбца { if ( a[i-1][j] != 0 ) { if ( k != i ) a[k-1][j] = a[i-1][j]; --k; } } while ( k != 0 ) a[--k][j] = 0; }
Below is a demonstration program.
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { int a[][] = { { 1, 1 }, { 0, 2 }, { 2, 0 }, { 0, 0 }, { 3, 3 } }; for ( int i = 0; i < a.length; i++ ) { for ( int j = 0; j < a[i].length; j++ ) System.out.printf( "%d ", a[i][j] ); System.out.println();; } System.out.println();; for ( int j = 0; j != a[0].length; j++ ) { int k = a.length; for ( int i = a.length; i != 0; i-- ) { if ( a[i-1][j] != 0 ) { if ( k != i ) a[k-1][j] = a[i-1][j]; --k; } } while ( k != 0 ) a[--k][j] = 0; } for ( int i = 0; i < a.length; i++ ) { for ( int j = 0; j < a[i].length; j++ ) System.out.printf( "%d ", a[i][j] ); System.out.println();; } System.out.println();; } }
Its output to the console
1 1 0 2 2 0 0 0 3 3 0 0 0 0 1 1 2 2 3 3