Codice da spiegare

di il
15 risposte

Codice da spiegare

Salve ragazzi mi potreste spiegare questo codice grazie
public class Test {
   public static void main(String[] args) {
      String [] [] chs = new String [2] [];
      chs [0] = new String [2];
      chs [1] = new String [5];
      int i = 97;

      for (int a = 0; a <chs.length; a++) {
           for(int b = 0; b<chs.length; b++) {
                chs [a] [b] = "" + i;
                i++;
           }
       }

       for ( String [] ca : chs) {
            for ( String c : ca) {
                  System.out.println(c + " ");
            }
            System.out.println()
        }
  }
}
  
piu che altro cosa scorrono i for grazie

15 Risposte

  • Re: Codice da spiegare

    Lo hai eseguito? Cosa visualizzi? Nessuna idea neanche una?
  • Re: Codice da spiegare

    oregon ha scritto:


    Lo hai eseguito? Cosa visualizzi? Nessuna idea neanche una?
    Non ancora, ma credo che i primi due for scorrano le righe e colonne dell' array ed incrementano la variabile i di 1 ogni volta che cilcla, gli ultimi due for non mi viene in mente niente
  • Re: Codice da spiegare

    Eseguilo prima di postare nel forum e spiega quello che vedi
  • Re: Codice da spiegare

    maracaibo25 ha scritto:


    
          for (int a = 0; a <chs.length; a++) {
               for(int b = 0; b<chs.length; b++) {
      
    Il secondo blocco di for utilizza il "for-each" ed è di per sé corretto.
    Il primo blocco di for usa il for classico con indice.

    Ma b<chs.length non è proprio corretto in quanto sta usando il numero di righe .... mentre invece dovrebbe usare il numero di colonne di quella riga "a".
  • Re: Codice da spiegare

    Ma b<chs.length non è proprio corretto in quanto sta usando il numero di righe .... mentre invece dovrebbe usare il numero di colonne di quella riga "a".
    è un programma gia fatto io l'ho solo copiato
  • Re: Codice da spiegare

    oregon ha scritto:


    Eseguilo prima di postare nel forum e spiega quello che vedi
    viene questo risultato
    97
    98
    99
    100
    null
    null
    null
  • Re: Codice da spiegare

    maracaibo25 ha scritto:


    è un programma gia fatto io l'ho solo copiato
    Ma è comunque, in parte, sbagliato e tra l'altro stampare i valori con un println(c + " ") è poco utile perché va sempre a capo e non dà certo l'idea di "bidimensionale".

    Quindi, non ho capito, quali sono ancora i tuoi dubbi??
  • Re: Codice da spiegare

    Quindi, non ho capito, quali sono ancora i tuoi dubbi??
    i miei dubbi sono sugli ultimi due for each e poi un un'altra cosa, quando nelle colonne non ce il valore ( new String [2] [ ] ) è zero o "null" ?
  • Re: Codice da spiegare

    maracaibo25 ha scritto:


    i miei dubbi sono sugli ultimi due for each
    Sfruttano il "for-each" di Java 5+.
           for ( String [] ca : chs) {
                for ( String c : ca) {
    chs è un array bidimensionale, ciascun elemento è un array monodimensionale, appunto String[]
    ca è un array monodimensionale, ciascun elemento è appunto un String
    Quindi "quadra" tutto.

    maracaibo25 ha scritto:


    quando nelle colonne non ce il valore ( new String [2] [ ] ) è zero o "null" ?
    Se fai new String[2][0] crei un array principale che ha 2 riferimenti a due array di lunghezza 0 (quindi due sotto-array reali, esistenti ma senza elementi)
    Se fai new String[2][] crei solo l'array principale e basta. I suoi elementi sono null.

    All'atto della istanziazione di un array multi-dimensionale, solo la lunghezza della prima dimensione è obbligatoria. Le altre dimensioni sono opzionali. Se mancano, è perché tipicamente si creano le altre dimensioni "programmaticamente" (come nel tuo esempio) o comunque in un secondo momento. Questo serve anche per creare array "jagged" (irregolari) proprio come nel tuo esempio!

    In sostanza es.

    String[][] arr = new String[3][5];

    è equivalente a

    String[][] arr = new String[3][];
    arr[0] = new String[5];
    arr[1] = new String[5];
    arr[2] = new String[5];
  • Re: Codice da spiegare

    andbin ha scritto:


    maracaibo25 ha scritto:


    i miei dubbi sono sugli ultimi due for each
    Sfruttano il "for-each" di Java 5+.
           for ( String [] ca : chs) {
                for ( String c : ca) {
    chs è un array bidimensionale, ciascun elemento è un array monodimensionale, appunto String[]
    ca è un array monodimensionale, ciascun elemento è appunto un String
    Quindi "quadra" tutto.

    maracaibo25 ha scritto:


    quando nelle colonne non ce il valore ( new String [2] [ ] ) è zero o "null" ?
    Se fai new String[2][0] crei un array principale che ha 2 riferimenti a due array di lunghezza 0 (quindi due sotto-array reali, esistenti ma senza elementi)
    Se fai new String[2][] crei solo l'array principale e basta. I suoi elementi sono null.

    All'atto della istanziazione di un array multi-dimensionale, solo la lunghezza della prima dimensione è obbligatoria. Le altre dimensioni sono opzionali. Se mancano, è perché tipicamente si creano le altre dimensioni "programmaticamente" (come nel tuo esempio) o comunque in un secondo momento. Questo serve anche per creare array "jagged" (irregolari) proprio come nel tuo esempio!

    In sostanza es.

    String[][] arr = new String[3][5];

    è equivalente a

    String[][] arr = new String[3][];
    arr[0] = new String[5];
    arr[1] = new String[5];
    arr[2] = new String[5];
    ok grazie andbin
  • Re: Codice da spiegare

    Ritornando al codice perche come risultato da 3 "null" quando l'array principale ha 2 riferimenti
  • Re: Codice da spiegare

    Dopo 5 mesi non hai ancora capito?
    
          String [] [] chs = new String [2] [];
          chs [0] = new String [2];
          chs [1] = new String [5];
    
    in chs[1] le stringhe sono 5 !
  • Re: Codice da spiegare

    maracaibo25 ha scritto:


    Ritornando al codice perche come risultato da 3 "null" quando l'array principale ha 2 riferimenti
    L'array chs è "bidimensionale" ma per come è stato inizializzato è un array jagged ("irregolare") perché la prima riga ha 2 colonne mentre la seconda riga ha 5 colonne (insomma, non è rettangolare).

    E l'ho detto già in precedenza, il secondo for è "dubbio": for(int b = 0; b<chs.length; b++) perché usa chs.length (lunghezza dell'array principale, 2 = due righe).
    Ovvero il setup con il valore di i considera la matrice solo come se fosse un 2x2 pertanto inizializza solo 4 celle:

    Ora, Se l'array strutturalmente risulta:
    +---+---+
    |   |   |
    +---+---+---+---+---+
    |   |   |   |   |   |
    +---+---+---+---+---+
    Secondo te alla luce di quanto detto, perché ci sono 3 null?

    P.S. e se l'hai eseguito ma l'output non ti ha "detto" nulla ... prova a cambiare la parte finale in:
            for (String [] ca : chs) {
               for (String c : ca) {
                   System.out.print("[" + c + "] ");
               }
               System.out.println();
            }
  • Re: Codice da spiegare

    andbin ha scritto:


    L'array chs è "bidimensionale" ma per come è stato inizializzato è un array jagged ("irregolare") perché la prima riga ha 2 colonne mentre la seconda riga ha 5 colonne (insomma, non è rettangolare).

    E l'ho detto già in precedenza, il secondo for è "dubbio": for(int b = 0; b<chs.length; b++) perché usa chs.length (lunghezza dell'array principale, 2 = due righe).
    Ovvero il setup con il valore di i considera la matrice solo come se fosse un 2x2 pertanto inizializza solo 4 celle:

    Ora, Se l'array strutturalmente risulta:
    +---+---+
    |   |   |
    +---+---+---+---+---+
    |   |   |   |   |   |
    +---+---+---+---+---+
    Secondo te alla luce di quanto detto, perché ci sono 3 null?
    inizializzando solo le prima 4 celle restano fuori le ultime 3 celle,che sarebbero le restanti della seconda riga da cui escono fuori i 3 null
Devi accedere o registrarti per scrivere nel forum
15 risposte