Popolare un array multidimensionale

di il
3 risposte

Popolare un array multidimensionale

Ciao a tutti. Sto cercando di popolare un array multidimensionale con dei numeri casuali. Ho letto la guida w3c ma non menziona gli array multidimensionali. Ho provato con un doppio ciclo for senza riuscirci. In particolare per popolare l'array uso il metodo push, ma non so come implementarlo. Qualche suggerimento?

function visualizza(){
    vis=document.getElementById("vis")
    const arr=new Array(2)
    let numRnd=0
    
    
        for(let i=0; i< arr.length; i++){
            arr[i]=new Array(2)
             numRnd=Math.floor(Math.random()*10)+1  
            arr.push([numRnd]) 
            vis.innerHTML= "Input a= " + "[" +arr+ "]"
        }
}

3 Risposte

  • Re: Popolare un array multidimensionale

    Ho provato con questo codice. Visualizza l'array. Però non funziona come vorrei. Deve visualizzare gli elementi con righe separate: Esempio:
    matrice =
    [
    [1, 50, 100],
    [1, 20, 40],
    ]

    Questo è il codice:
    
    function crea(){
       let M=parseInt(document.getElementById("righe").value);
       let N=parseInt(document.getElementById("col").value);
       matrice=[];
       let numRnd=0
        let text=""
    
          for(let i=0; i<M;i++){
          numRnd=Math.floor((Math.random()*100)+1)
          matrice.push([numRnd])
    
            for(let j=0; j<N; j++){
            matrice[i][j]=Math.floor((Math.random()*100)+1)
            
            text += matrice[i][j]+ ",";
            }
          }
        document.getElementById("vis").innerHTML = "[" +text +  "]" 
      }
    
    
    Dimenticavo di dire che devo popolare una matrice di NxM elementi con N e M inseriti da textbox
  • Re: Popolare un array multidimensionale

    tonyven ha scritto:


    Ho letto la guida w3c ma non menziona gli array multidimensionali.
    Un array multidimensionale non è altro che un array di array, ovvero un array di primo livello di cui ogni elemento è rappresentato da un array di secondo livello, che contiene un riferimento ad altri array (se occorre introdurre altre dimensioni) o i valori veri e propri.

    tonyven ha scritto:


    Ho provato con un doppio ciclo for senza riuscirci.
    Ovvero, cosa accade? Hai provato a leggere riga per riga il codice e a darti spiegazione su ciò che avviene a ogni istruzione e verificare se corrisponde alla logica che hai in mente?

    tonyven ha scritto:


    In particolare per popolare l'array uso il metodo push, ma non so come implementarlo.
    Il metodo si chiama, o si invoca, non si implementa: è già implementato dal runtime di JavaScript.

    tonyven ha scritto:


    Qualche suggerimento?
    Io ne avevo già dati un paio tempo addietro, ossia:
    • usare il terminatore delle istruzioni ";" per uniformità del codice;
    • suddividere la parte logica dalla parte della UI: crea una funzione che generi gli array prendendo come parametro i valori recuperati dagli elementi della pagina HTML, senza inserire tutta la logica in una unica istruzione;
    • usare maggiore precisione: parli di doppio ciclo for(), ma nel tuo codice non si vede nulla;
    • non usi un console.log() o altri strumenti per fare un minimo di debugging, anche a livello rudimentale, di ciò che accade nel tuo programma.
    Alla fine, l'unica soluzione che si può dare ai tuoi problemi è il codice esatto, perché quello che pubblichi spesso non è leggibile, non corrisponde alle informazioni che dai nel resto del messaggio e continui a non applicare nulla dei piccoli suggerimenti che ti vengono dati per risolvere queste problematiche.

    Così non si faranno mai passi avanti significativi e ci si troverà sempre al palo, anche nella risoluzione di problemi come questi che sono abbastanza semplici.

    Applica le correzioni sopra e riposta il codice, così possiamo ragionarci meglio.

    Ciao!
  • Re: Popolare un array multidimensionale

    tonyven ha scritto:


    Ho provato con questo codice.
    Non usare il metodo push(), ma inizializza ogni riga della matrice con un array che abbia già le dimensioni richieste in input.
    La sintassi la conosci.

    tonyven ha scritto:


    Visualizza l'array.
    Usa console.log() per questi scopi: se costruisci una rappresentazione nel codice e non vedi quello che ti aspetti, il problema potrebbe risiedere nella creazione del testo da mostrare, piuttosto che nella struttura effettiva di ciò che stai costruendo.

    Meno logica scrivi, soprattutto quella per diagnosticare e visualizzare i valori del programma, meno è facile introdurre dei bug indesiderati.

    tonyven ha scritto:


    Però non funziona come vorrei.
    Sì, perché dovrebbero esserci diversi elementi in grado di far suonare qualche campanello di allarme quando notati: ad esempio, perché devi assegnare un valore causale a ogni elemento dell'array e nel tuo codice le chiamate a Math.random() sono due? Ne basterebbe una sola.

    Usi poi sempre convenzioni diverse: "M" e "N" maiuscole, "matrice" minuscola (senza un let/const!), niente separatori di istruzioni, indentazione errata dei cicli for(), interazione con il DOM tutto nella stessa funzione... ma su questi aspetti mi sono già espresso.

    Ciao!
Devi accedere o registrarti per scrivere nel forum
3 risposte