/*
  Si ottenga un numero N dall'utente e si riempia un array quadrato N x N
  con i numeri consecutivi da 0 a N^2-1 come segue:
  a) riga per riga da sinistra verso destra in maniera crescente.
    Esempio: se N=3
    0 1 2
    3 4 5
    6 7 8
  b) lo stesso di a) ma in maniera decrescente
  c) colonna per colonna dall'alto verso il basso.
    Esempio: se N=3
    0 3 6
    1 4 7
    2 5 8
  d) lo stesso di c ma in maniera decrescente
  e) a serpentina da 0 dfino a N^2-1
    Esempio se N=3
    0 1 2
    5 4 3
    6 7 8
*/

import javax.swing.JOptionPane;
class ExArray_02 {
  public static void main(String[] args) {
    int N;
    do
      N = Integer.parseInt(JOptionPane.showInputDialog("Matrice quadrata di lato?"));
    while (N<2 || N>20);
      
    int[][] Array1 = new int[N][N];
    
    //chiedi tipo di riempimento
    String msg = "Scegli opzioni:\n 1) da sx verso dx \n 2) come 1 ma decrescente \n 3) colonna per colonna \n ";
    msg += "4) come 3 ma decrescente \n 5) serpentina \n 6) Esci dal programma";
    int scelta;
    for (;;) {     //ciclo infinito da cui si esce solo tramite menù
      do
        scelta = Integer.parseInt(JOptionPane.showInputDialog(msg));
      while (scelta<1 || scelta>6);
      
      int cnt=0;  //contatore
      int j, k;   //cicli
      switch (scelta) {
        case 1:
          for (j=0; j<Array1.length; j++)
            for (k=0; k<Array1[0].length; k++)
              Array1[j][k] = cnt++;
          break;
            
        case 2:
          cnt = (N*N)-1;
          for (j=0; j<Array1.length; j++)
            for (k=0; k<Array1[0].length; k++)
              Array1[j][k] = cnt--;
          break;

        case 3:
          for (j=0; j<Array1.length; j++)
            for (k=0; k<Array1[0].length; k++)
              Array1[k][j] = cnt++;
          break;
          
        case 4:
          cnt = (N*N)-1;          
          for (j=0; j<Array1.length; j++)
            for (k=0; k<Array1[0].length; k++)
              Array1[k][j] = cnt--;
          break;
          
        case 5:
          int istart, iend;
          for (j=0; j<Array1.length; j++)
            if (j % 2 == 0)
              for (k=0; k<Array1[0].length; k++)
                Array1[j][k] = cnt++;
            else
              for (k=Array1[0].length-1; k>=0; k--)
                Array1[j][k] = cnt++;
                
          break;
          
        default:
          System.exit(0);
      }
      
        
      //stampa della matrice
      System.out.println("\nRiempimento con scelta " + scelta);
      for (j=0; j<Array1.length; j++) {
        for (k=0; k<Array1[0].length; k++)
            System.out.print("\t" + Array1[j][k]);      
        System.out.println();
      }
            
    }
  }
}