Confronto array

di il
3 risposte

Confronto array

Ho quasi risolto un esercizio che chiede di realizzare una tombola. Non riesco a capire perchè ponendo una condizione con il costrutto if mi dà sempre una condizione falsa. Posto il codice per chiarezza:


function verifica(){
    const numArr=document.getElementById("vis")
    const num1=parseInt(document.getElementById("num1").value)
    const num2=parseInt(document.getElementById("num2").value)
    const num3=parseInt(document.getElementById("num3").value)
    const num4=parseInt(document.getElementById("num4").value)
    const num5=parseInt(document.getElementById("num5").value)
    const num6=parseInt(document.getElementById("num6").value)
    const num7=parseInt(document.getElementById("num7").value)
    const num8=parseInt(document.getElementById("num8").value)
    const num9=parseInt(document.getElementById("num9").value)
    const num10=parseInt(document.getElementById("num10").value)
    const arr=[]  //array fisso
    const arrRes=[num1,num2,num3,num4,num5,num6,num7,num8,num9,num10]  //array personale
    let numArr1="" //visualizzazione array fisso
    let numRnd=0   //numero casuale
    let visArr=""  //visualizzazione array personale
    let numEsa="" //numero indovinato
    
   
        for(let i=0; i < 10; i++){
        numRnd=Math.floor(Math.random()*90)+1
        arr.push(numRnd)
     numArr1 +=arr[i]+" "
    document.getElementById("vis").innerHTML = numArr1 
    
    }
    
        for(let y=0; y<10; y++){
            visArr +=arrRes[y] +" "
            document.getElementById("vis1").innerHTML = visArr
            for(let z=0; z<=10; z++)
                
                if(arrRes[z]==arr[y]){
                numEsa +=arrRes[z] + " "
                
                    document.getElementById("vis2").innerHTML = "Complimenti hai indovinato il n :" + numEsa
                }else{
                    document.getElementById("vis2").innerHTML="Non hai vinto"+ numEsa
                }
            }
    
           
        }
Posto anche l'HTML per chi volesse provarlo.Grazie
<htm>
    <body>
    
        <input type="text" id="num1" size="1">
        <input type="text" id="num2" size="1">
        <input type="text" id="num3" size="1">
        <input type="text" id="num4" size="1">
        <input type="text" id="num5" size="1"><br>
        <input type="text" id="num6" size="1">
        <input type="text" id="num7" size="1">
        <input type="text" id="num8" size="1">
        <input type="text" id="num9" size="1">
        <input type="text" id="num10" size="1"><br>
        <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>
    </htm>

3 Risposte

  • Re: Confronto array

    tonyven ha scritto:


    Ho quasi risolto un esercizio che chiede di realizzare una tombola.
    Quasi risolto?

    tonyven ha scritto:


    Non riesco a capire perchè ponendo una condizione con il costrutto if mi dà sempre una condizione falsa. Posto il codice per chiarezza [...]
    Diciamo che tutto può essere questo codice tranne che chiaro.

    Innanzitutto, le pagine HTML iniziano e finiscono con <html>, e non <htm>.
    
    const numArr=document.getElementById("vis")
    
    A che serve questa se poi numArr non viene più utilizzata?
    
        const num1=parseInt(document.getElementById("num1").value)
        const num2=parseInt(document.getElementById("num2").value)
        const num3=parseInt(document.getElementById("num3").value)
        const num4=parseInt(document.getElementById("num4").value)
        const num5=parseInt(document.getElementById("num5").value)
        const num6=parseInt(document.getElementById("num6").value)
        const num7=parseInt(document.getElementById("num7").value)
        const num8=parseInt(document.getElementById("num8").value)
        // ...
    
    Questo codice è evidentemente e inutilmente ripetitivo: basta fare un ciclo e mettere i valori all'interno di un array... se i numeri fossero mille andresti a creare mille variabili?

    Il resto del codice è illeggibile e andrebbe provato realmente, cioè copiato/incollato ed eseguito oltreché debuggato per capire quello che succede, che scopo ha e dove si annida l'errore.

    Rifattorizza il tutto e sfrutta gli strumenti (che già peraltro conosci) per rendere il programma più chiaro, magari con qualche commento per capire cosa fa in determinati punti (anche se questo appunto si dovrebbe evincere dal codice, e non dalla sua interpretazione forzata o da un commento che lo spiega).

    Ciao!
  • Re: Confronto array

    Ciao. Ho seguito il consiglio e sto provando a confrontare due array. Uno di 10 elementi con numeri generati casualmente da 0 a 90. Un secondo array sempre di 10 elementi inseriti dall'utente con numeri da 1 a 90. L'esercizio richiede che se ci sono dei numeri uguali nei due array li deve visualizzare. Il codice che ho scritto però individua sempre e solo un numero.
    
    for(let a=0; a < 10; a++){
        numArr1= arr[a]  //array numeri casuali
        for(let z=0; z < 10; z++){
            numArr2 =arrPer[z]    //array numeri inseriti dall'utente
          
            if(numArr2 == numArr1){
    
                vis2.innerHTML= "Hai vinto" + numArr2
        }else{
            vis2.innerHTML= "Non hai vinto"
        }
        }
     }
    Spero di essere stato chiaro.Grazie
  • Re: Confronto array

    tonyven ha scritto:


    L'esercizio richiede che se ci sono dei numeri uguali nei due array li deve visualizzare.
    I numeri devono essere tutti uguali, oppure basta che ce ne sia solamente uno?

    tonyven ha scritto:


    Il codice che ho scritto però individua sempre e solo un numero.
    Il codice che hai scritto confronta ciascun numero di un array con quelli dell'altro, ma quando individua una corrispondenza non si arresta e prosegue il ciclo, quindi non è corretto (oltre al fatto che dovrebbe essere formattato meglio).

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