Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Array bidimensionale

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    160

    Array bidimensionale

    Con il seguente codice vorrei riempire di numeri casuali un array bidimensionale dopo aver eseguito l'input del numeri di righe e colonne dell'array. Se scrivo il numero delle righe minore o uguale del numero delle colonne, la matrice viene scritta regolarmente, se in vece il numero delle righe è maggiore del numero delle colonne la matrice viene scritta solo parzialmente e dà l'errore:
    Uncaught TypeError: Cannot set property '0' of undefined at...
    Desidererei sapere il perché di questa comportamento diverso nei due casi e di che errore si tratti. Grazie

    lanvoel

    codice:
    <!doctype html>
    <html>
    <head>
    <meta charset = "UTF-8">
    </head>
    <body>
    
    
    <script>
    var R = prompt('scrivi righe R= ');
    var C = prompt('scrivi colonne C= ');
    document.write("input: <br>");
    document.write("righe R=" + R +",  colonne C=" +C +"<br><br>");
    
    
    var matrice1 = new Array();
        for (var z=0; z<C; z++) {
         matrice1[z] = new Array();
         }
    
    
    document.write("matrice1: <br>");
    for (var i=0; i<R; i++) {
       for (var j=0; j<C; j++) {
         matrice1[i][j] = Math.floor(Math.random()*100)+1;
         document.write(matrice1[i][j] +", ");
        }
         document.write("<br>");
    }
    </script>
    </body>
    </html>

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,764
    Ciao, l'errore sta nella prima parte in cui crei l'array di array.

    codice:
    for (var z=0; z<C; z++) {
       matrice1[z] = new Array();
    }
    In questo ciclo viene definita un array di array e stai considerando C come valore limite dell'indice [z], cioè la prima dimensione dell'array, in seguito però stai usando R come limite del primo indice:

    codice:
    for (var i=0; i<R; i++) {
    ...
          matrice1[i][j] = ...
    ...
    }
    Avviene quindi che la prima dimensione è definita inizialmente con il valore che inserisci per le colonne ma in seguito stai considerando il valore inserito per le righe.

    Quindi se il valore di R è maggiore di C salta fuori l'errore perché chiaramente non esiste la seconda dimensione per quegli indici superiori (o uguali) al valore di C.

    Forse sarebbe più corretto usare R anche nel primo ciclo in cui definisci l'array, in questo modo:

    codice:
    for (var z=0; z<R; z++) {
       matrice1[z] = new Array();
    }
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    160
    Grazie KillerWorm, sia per la spiegazione del diverso comportamento di R >=C e R<C, sia per per la soluzione per evitare l'errore.

    lanvoel

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.