[Javascript] problema nell'utilizzo di un array

Ctrl+Alt+Mario

Nuovo Utente
27 Ott 2018
2
0
1
Buongiorno a tutti. Mi sono cimentato da poco ad usare gli array su javascript, e per mettere in pratica quanto appreso ho provato a fare un banale esercizio, senza però ottenere un risultato soddisfacente. Non capisco dove sia l’errore. Nello specifico, nell’esercizio ho messo 2 bottoni: uno consente di aggiungere all’array i numeri immessi in input, l’altro consente di sommare i valori contenuti nel vettore. Né la stampa dei numeri, né la loro somma risulta essere corretta.

Codice:
<html>

<head>
                <script type="text/javascript">
                var vettore = new Array();  
    
                function ControllaNumero(){
                               numeri.numero_input.style="color: black";      
                               var numero = numeri.numero_input.value;
                               var flag=true;
                               if(isNaN(numero)){
                                               flag=false;
                                               numeri.numero_input.style="color: red";
                                               alert("Valore non accettabile!");
                               }
                               return flag;

                }

                function aggiungi(){
                               var i;
                               if(ControllaNumero()==true){
                                               vettore.push(parseInt(numeri.numero_input.value));
                                               for(i=0; i<vettore.length; i++){
                                                               numeri.stampa.value=numeri.stampa.value+" "+vettore;
                                               }
                                               alert(vettore);
                               }
                               else{
                                               alert("err");
                               }
                }

                function calcola(){
                               var i;
                               var risultato;
                               for (i=0; i<vettore.length; i++) {
                                       risultato=risultato+vettore;

                               }
                               numeri.stampa.value=risultato;
                }
                </script>
</head>
<body>
   <form name="numeri">
       <input name="numero_input" type="text" onKeyUp="ControllaNumero()">
       <input name="b1" type="button" value="AGGIUNGI" onClick="aggiungi()">
       <input name="b2" type="button" value="CALCOLA" onClick="calcola()">
       <input name="reset" type="reset" value="reset">
       <textarea name="stampa" rows="10" cols="20" readOnly>
       </textarea>
   </form>
</body>

</html>
 
Ultima modifica di un moderatore:
Salve, per la visualizzazione di un array puoi utilizzare il metodo join() che sostanzialmente restituisce una stringa testuale della serie di valori suddivisi da un eventuale separatore. Questo ti evita anche di usare un inutile ciclo.

La tua funzione aggiungi() potrebbe essere sistemata in questo modo:
Codice:
function aggiungi() {
   if (ControllaNumero() == true) {
      vettore.push(parseInt(numeri.numero_input.value));

      numeri.stampa.value = vettore.join(' ');

   } else {
      alert("err");
   }
}

Nella funzione calcola() invece c'è qualche imprecisione:

- la variabile risultato dovrebbe essere inizializzata con un valore numerico dal momento che devi usarla con operatori matematici. Nella dichiarazione puoi assegnargli magari il valore 0 (zero).

- nella somma che effettui all'interno del ciclo, dovresti sommare man mano i singoli valori dell'array, non l'intero array.
Qui stai sommando l'intero array, capisci da te che non può andare bene:
Codice:
for (i = 0; i < vettore.length; i++) {
   risultato = risultato + vettore;
}
dovrà piuttosto essere una cosa del genere (vedi l'indice che ho aggiunto a vettore):
Codice:
for (i = 0; i < vettore.length; i++) {
   risultato = risultato + vettore[i];
}

Riepilogando, la funzione calcola() potrebbe essere sistemata in questo modo:
Codice:
function calcola() {
   var i;
   var risultato = 0;
   for (i = 0; i < vettore.length; i++) {
      risultato = risultato + vettore[i];
   }
   numeri.stampa.value = risultato;
}

In alternativa è possibile usare il metodo reduce(), ottenendo peraltro un codice più compatto.
La funzione calcola() potrebbe essere riscritta in questo modo:
Codice:
function calcola() {
   numeri.stampa.value = vettore.reduce(function(totale, numero) {
      return totale + numero;
   });
}

Presumo poi che una volta ottenuta la somma tu voglia magari usare quel valore come unico valore dell'array per poter poi eseguire ulteriori aggiunte/calcoli sulla base del nuovo risultato, cosa che ora il tuo codice non fa; in tal caso, oltre l'output mostrato a video, dovresti aggiornare opportunamente lo stesso vettore. Dato però che per te si tratta di materia di studio, lascio a te cercare di capire come impostare eventuali sviluppi. Buon proseguimento.
 
  • Like
Reactions: Ctrl+Alt+Mario
Salve, per la visualizzazione di un array puoi utilizzare il metodo join() che sostanzialmente restituisce una stringa testuale della serie di valori suddivisi da un eventuale separatore. Questo ti evita anche di usare un inutile ciclo.

La tua funzione aggiungi() potrebbe essere sistemata in questo modo:
Codice:
function aggiungi() {
   if (ControllaNumero() == true) {
      vettore.push(parseInt(numeri.numero_input.value));

      numeri.stampa.value = vettore.join(' ');

   } else {
      alert("err");
   }
}

Nella funzione calcola() invece c'è qualche imprecisione:

- la variabile risultato dovrebbe essere inizializzata con un valore numerico dal momento che devi usarla con operatori matematici. Nella dichiarazione puoi assegnargli magari il valore 0 (zero).

- nella somma che effettui all'interno del ciclo, dovresti sommare man mano i singoli valori dell'array, non l'intero array.
Qui stai sommando l'intero array, capisci da te che non può andare bene:
Codice:
for (i = 0; i < vettore.length; i++) {
   risultato = risultato + vettore;
}
dovrà piuttosto essere una cosa del genere (vedi l'indice che ho aggiunto a vettore):
Codice:
for (i = 0; i < vettore.length; i++) {
   risultato = risultato + vettore[i];
}

Riepilogando, la funzione calcola() potrebbe essere sistemata in questo modo:
Codice:
function calcola() {
   var i;
   var risultato = 0;
   for (i = 0; i < vettore.length; i++) {
      risultato = risultato + vettore[i];
   }
   numeri.stampa.value = risultato;
}

In alternativa è possibile usare il metodo reduce(), ottenendo peraltro un codice più compatto.
La funzione calcola() potrebbe essere riscritta in questo modo:
Codice:
function calcola() {
   numeri.stampa.value = vettore.reduce(function(totale, numero) {
      return totale + numero;
   });
}

Presumo poi che una volta ottenuta la somma tu voglia magari usare quel valore come unico valore dell'array per poter poi eseguire ulteriori aggiunte/calcoli sulla base del nuovo risultato, cosa che ora il tuo codice non fa; in tal caso, oltre l'output mostrato a video, dovresti aggiornare opportunamente lo stesso vettore. Dato però che per te si tratta di materia di studio, lascio a te cercare di capire come impostare eventuali sviluppi. Buon proseguimento.

Grazie mille per le dritte!
 

Discussioni simili