codice:
public class Prova {
    public static void main(String[] args) {
        String[][] mat1 = {
            { "A", "B", "C" },
            { "D", "E", "F" },
            { "G", "H", "I" },
        };

        String[][] mat2 = {
            { "A", "B", "C", "D", "E" },
            { "F", "G", "H", "I", "L" },
            { "M", "N", "O", "P", "Q" },
        };

        stampaPerDiagonali(mat1);
        stampaPerDiagonali(mat2);
    }

    public static void stampaPerDiagonali(String[][] mat) {
        int numRighe = mat.length;
        int numColonne = mat[0].length;

        int righeTeoriche = numRighe + numColonne - 1;

        for (int rt = 0; rt < righeTeoriche; rt++) {
            int r, c;

            if (rt < numRighe) {
                r = rt;
                c = 0;
            } else {
                r = numRighe - 1;
                c = rt - numRighe + 1;
            }

            while (r >= 0 && c < numColonne) {
                System.out.print(mat[r][c] + " ");
                r--;
                c++;
            }
        }

        System.out.println();
    }
}
E come vedi funziona per qualunque tipo di matrice .... quadrata o rettangolare che sia!


P.S. E ho impiegato una manciata di minuti a scriverlo e provarlo ...