Buenas, para quien revise este ejercicio funciona correctamente. Hay una cuestión que no me parece del todo correcta, pero que también está relacionada con que habría que mejorar el enunciado para evitar que se haga así. Lo que no me parece correcto es almacenar en el mismo array como elemento [ i ][0] el nombre del país, por ejemplo Argentina, y que luego [ i ][1], [ i ][2], [ i ][3] sean ciudades de argentina. ¿Por qué? Porque lo más lógico es que todos los elementos de un array sean de la misma naturaleza, es decir, que sean o bien países, o bien ciudades, pero no algunos elementos de un tipo y otros de otro.
Esto podría solucionarse creando un array de países, como pais[0], pais[1], pais[2], pais[3] y luego el array de ciudades ciudad[0][0], ciudad[0][1], ciudad[0][2] tendría las tres ciudades del país cero.
En este caso declararíamos el array de pais por un lado y String[][] paisCiudad = new String[4][3]; teniendo la primera dimensión 4 elementos (cuatro países) y la segunda dimensión 3 elementos (3 ciudades para cada país).
Salu2