Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    213

    confronto elementi di due array

    Ciao a tutti. Sto provando a confrontare un array di 10 elementi di numeri casuali con un'altro array di 10 elementi di numeri inseriti dall'utente. Se nei due array ci sono numeri uguali li devo evidenziare. Ho provato con questo codice ma non funziona perchè sembra che l' IF che ho utilizzato restituisce sempre il valore False:
    codice:
    or(var a=0; a < arr.length; a++){
        //numArr1= arr[a]
        for(var z=0; z < arrPer.length; z++){
            //numArr2 =arrPer[z]
            if(arrPer[z] == arr[a]){
                numArr2 = arrPer[z]
    
                vis2.innerHTML = "Hai vinto" + numArr2
        }else{
            vis2.innerHTML = "Non hai vinto" + arrPer[z]
        
        }
    
    Alla fine ho messo arrPer per vedere se si popolava l'array.Non riesco a capire perchè l'IF non fà il confronto. Dove sbaglio? Grazie

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Quote Originariamente inviata da tonino1 Visualizza il messaggio
    Ciao a tutti. Sto provando a confrontare un array di 10 elementi di numeri casuali con un'altro array di 10 elementi di numeri inseriti dall'utente. Se nei due array ci sono numeri uguali li devo evidenziare. Ho provato con questo codice ma non funziona perchè sembra che l' IF che ho utilizzato restituisce sempre il valore False:
    codice:
    or(var a=0; a < arr.length; a++){
        //numArr1= arr[a]
        for(var z=0; z < arrPer.length; z++){
            //numArr2 =arrPer[z]
            if(arrPer[z] == arr[a]){
                numArr2 = arrPer[z]
    
                vis2.innerHTML = "Hai vinto" + numArr2
        }else{
            vis2.innerHTML = "Non hai vinto" + arrPer[z]
        
        }
    
    Alla fine ho messo arrPer per vedere se si popolava l'array.Non riesco a capire perchè l'IF non fà il confronto. Dove sbaglio? Grazie
    Senza sapere il tipo di dati che usi mi viene da pensare che stai confrontando numeri con stringhe. Visto che dici che è l'utente ad inserire i numeri, probabilmente hai una serie di numeri in stringa che tenti di confrontare con numeri reali.
    Prova ad utilizzare parseInt sull'elemento dell'array ottenuto dall'utente.

    Codice:
    codice:
    var a =[1,2,3,4,5,6];var b = prompt("inserisci numeri separati da spazi vuoti","1 2 3 4 5").split(' ');
    if(a[0]==parseInt(b[0]))//con parseInt
        alert("Sono uguali");
    if(a[0]!=b[0])//senza parseInt
        alert("Sono diversi");
    Ultima modifica di U235; 31-08-2022 a 23:19

  3. #3
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    .

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    213
    Ciao. Posto il codice fatto finora per chiarezza. Non riesco a venire a capo nel tentativo di trovare numeri uguali nei due array pur facendo il confronto di ogni numero nell'array che ho chiamato arrPer rispetto all'array di numeri casuali chiamato arr. Eppure secondo la logica dovrebbe funzionare. Probabilmente è scritto male.
    codice:
    <html>
        <body>
        
            <div id="nums"></div>
            <input type="button" value="Elabora" onclick="verifica()"><br>
            <script src="tombola.js"></script>
            <label> Tabella banco   :  </label><div id="vis"></div>
            <label>Tabella giocatore:</label><div id="vis1"></div>
            <label>Numeri indovinati: </label><div id="vis2"></div>
        </body>
    
    </html>


    codice:
    for (let i = 1; i <= 10; i++) {
        const inputEl = document.createElement('input')
        inputEl.setAttribute('type', 'text')
        inputEl.setAttribute('size', 1)
        inputEl.setAttribute('id', `num${i}`)
        nums.appendChild(inputEl)
    
        if (i === 5) {
            const brEl = document.createElement('br')
            nums.appendChild(brEl)
        }
    }
    
    function verifica(){
        const nums = document.getElementById('nums')
        const arrPer=[] //array personale
        const arr=[]  //array fisso
        let numArr1=0 //visualizzazione array fisso
        let numRnd=0   //numero casuale
        let numArr2=0 //visualizzazione array personale
        
            for( i=0; i < 10; i++){   //ciclo for per popolare array numeri casuali
            numRnd=Math.floor(Math.random()*90)+1
            arr.push(numRnd)
            numArr1 +=arr[i]+" "
            vis.innerHTML = numArr1 
        }
    
        nums.childNodes.forEach(num => {   //ciclo for per popolare array numeri inseriti dall'utente
            ((typeof num.value !== 'undefined') && (num.value !== ''))
                ? arrPer.push(num.value)
                : null
    
            numArr2 = arrPer.sort()
            vis1.innerHTML = numArr2 + " "
    
        })
        
           for(let a=0; a < arr.length; a++){   // cicli for annidati per trovare numeri uguali nei due array
             numArr1 = arr[a] +" "
              for(let z=0; z < arrPer.length; z++){
            numArr2 =arrPer[z] +" "
                if(numArr2 == numArr1){
                vis2.innerHTML = "Hai vinto" + numArr2
                }else{
                vis2.innerHTML = "Non hai vinto" + numArr1
             }
        }
     
    }  
    
    
    }

  5. #5
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Ciao,
    hai fatto un po un minestrone...
    Come prima cosa che salta all'occhio é il fatto che non metti il punto e virgola nel codice e in alcuni punti lo indenti male... ma va beh, questo ne pregiudica la leggibilitïa' piu' che altro.
    Poi ricorda che "1" é diverso da 1 (notare le virgolette), quindi quando ricavi i numeri da stringhe inviate dall'utente (scritte nel input) devi trasformarli in numeri prima di metterli nell'array.
    Inoltre attento a quando scrivi nei cicli, se scrivi in una variabile dentro il ciclo ti ritrovi solo l'ultima scrittura in quanto le precedenti vengo sovrascritte.
    Ancora: come per il confronto stringhe-numeri detto prima, anche l'ordinamento degli array é differente se sono numeri o stringhe, infatti "10" viene prima di "2" se parliamo di stringhe, questo perché il primo numero di dieci (1) é minore del primo numero di 2 (2), quindi avresti un ordinamento tipo 1,10,2. quindi anche qui devi mettere nell'array numeri e non stringhe (devi ovviamente usare parseInt() sul value dell'input prima di fare push nell'array).
    Non é finito: se ti interessa estrarre numeri casuali che non si ripetono questo che usi non é il modo migliore, in quanto i numeri casuali che generi posso uscire piu' volte, quindi un modo (neanche il piu' performante, ma almeno é semplice) é quello di creare un array con i numeri da 1 a 90 (compresi) e creare un numero random scelto tra 0 e la lunghezza dell'array che contiene appunto i numeri da 1 a 90, man mano che estrai usi il numero random uscito come indice dell'array, e prima di uscire dal ciclo togli quel numero dall'array, in questo modo sei sicuro che non possano essere estratti doppioni.

    Poi c'erano altre cosette ma non me le ricordo tutte, comunque puoi controllare questo codice derivato dal tuo, ma modificato per "funzionare"...

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    .

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    213
    Ciao. Vedendo il codice "funzionante" ho provato qualcosa di molto simile all'orgasmo. Dico che per arrivare a risolvere questo tipo di esercizio ho ancora molto da studiare perchè vedo delle cose mai viste prima. Non credo ci sarei mai arrivato. Comunque ti ringrazio tanto per il supporto dato e mi metterò sotto a studiare il tuo codice. Grazie ancora

  8. #8
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Quote Originariamente inviata da tonino1 Visualizza il messaggio
    Ciao. Vedendo il codice "funzionante" ho provato qualcosa di molto simile all'orgasmo. Dico che per arrivare a risolvere questo tipo di esercizio ho ancora molto da studiare perch� vedo delle cose mai viste prima. Non credo ci sarei mai arrivato. Comunque ti ringrazio tanto per il supporto dato e mi metter� sotto a studiare il tuo codice. Grazie ancora
    In realt� con il tuo codice non � mica vero che non si vince... � abbastanza improbabile ma si pu� vincere! infatti nel tuo ultimo codice fai il confronto tra due stringhe (aggiungi lo spazio), mentre nel primo non era specificato (da qui la spiegazione della differenza tra stringa e numero), per� il problema era che andavi a sovrascrivere la scritta "Hai vinto" con l'ultimo confronto, per cui le probabilit� di vincere (in realt� solo vedere la scritta: "Hai vinto") si riducono, devi indovinare l'ultimo numero tra quelli estratti (l'ultimo dell'array) ma solo con il numero piu' grande inserito dall'utente. Chiaramente stiamo parlando di stringhe, quindi quando dico piu' grande intendo secondo ordinamento delle stringhe, quindi ad esempio 3 viene dopo 29, per cui il piu' grande sarebbe 3 tra 3 e 29.
    Prova tu stesso nel tuo codice (qui fa uscire solo 1) riducendo i numeri estratti (numero random) a 1 al posto di 90, dopo in una casella metti 1 e vedrai che anche il tuo codice funziona!
    Ultima modifica di U235; 02-09-2022 a 00:27

  9. #9
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    .

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    213
    Più rileggo il tuo codice più rimango affascinato dalla raffinatezza dello script. Non mi stanco mai di rivederlo. C'è una riga in particolare che mi intriga parecchio e non riesco a capire:
    let numbers=Array.from({length: 90}, (_, i) => i + 1);
    Vedo in questa riga che viene creato un array a partire da un insieme di numeri da 0 a 90. Giusto? ma poi (_,i) => i+1 cosa vuol dire?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.