2015-10-06 2 views
-1

Je travaille sur cette tâche que j'ai reçue de l'école. Le programme fonctionne comme ceci: Vous passez des nombres séparés par des virgules, puis le programme place les valeurs dans un tableau d'entiers (parseInt()), puis il appelle la fonction de calcul, qui calcule le nombre le plus élevé, la somme, le la différence. Mais le fait est que le programme pense que la variable sum est une chaîne, pas un int. Donc, je reçois la somme de 0 + 1 + 2 = 012. C'est du javascript btw pur.variable ne sera pas un nombre entier javascript

window.onload = start; 
     var arr = []; 
     var sum = 0; 
     var max; 
     var avg; 

     function start() { 
      document.getElementById('sub').onclick = getValues; 
     } 

     function getValues() { 
      var str = document.getElementById('input').value; 
      arr = str.split(","); 
      for (var i = 0; i < arr.length; i++) { 
       parseInt(arr[i]); 
      } 
      calculate(arr); 
      print(); 
     } 

     function calculate(arr) { 
      var temp = arr[0]; 
      sum = 0; 
      for (var i = 0; i < arr.length; i++) { 
       if (temp < arr[i]) { 
        temp = arr[i]; 
       } 
       sum += arr[i]; 
      } 
      max = temp; 
      avg = sum/arr.length; 
     } 

     function print() { 
      document.getElementById('div').innerHTML = "In the array of theese values: " + arr + ",<br>is " + max + " the biggest, " + sum + " is the sum, " + " and " + avg + " is the average."; 
     } 
+0

Lorsque itérer 'arr', dont vous appelez' parseInt' sur la valeur, mais il n'y a jamais changer son type à un 'nombre'. –

+1

le 'parseInt (arr [i])' n'est assigné à aucune valeur dans la fonction getValues ​​(), vous devez soit faire arr [i] = parseInt (arr [i]) 'ou vous analyser les valeurs int où vous en avez besoin – Icepickle

+0

Placez un point d'arrêt sur la ligne 'parseInt'. Après l'exécution, examinez la valeur de 'arr [i]'. –

Répondre

6

Les valeurs arr sont des chaînes, car ils viennent de split()

Votre appel parseInt() ne fait rien, comme vous jeter son retour. Vous pouvez soit enregistrer la valeur:

arr[i] = parseInt(arr[i], 10); 

ou contraindre à un certain nombre lors de l'ajout:

sum += +arr[i];