somme des entiers contenus dans un tableau

somme des entiers contenus dans un tableau - HTML/CSS - Programmation

Marsh Posté le 30-05-2006 à 12:35:02    

:hello: bon ben voila, tout est dans le sujet, j'ai essayé de faire  une fonction du genre :

Code :
  1. function SommeOfArray(ArrayPiece)
  2. {
  3. for (var i = 0 ; i <= ArrayPiece.length; i++)
  4. {
  5.         somme = somme + ArrayPiece[i];
  6. }
  7. return somme ;
  8. }


mais ca me renvoi "NaN"
Ici ArrayPiece est un tableau associatif dont chaque élément contient soit 0, soit 1.
 
Un p"tit coup de main serait le bienvenu :)

Reply

Marsh Posté le 30-05-2006 à 12:35:02   

Reply

Marsh Posté le 30-05-2006 à 12:39:47    

t'oublie d'initialiser somme, donc la première fois qu'il fait somme = somme + ArrayPiece[i] il a somme qui vaut NaN (not a number), et donc Nan + ArrayPiece[i] = Nan, donc somme vaut encore NaN , et ca continue jusqu'à la fin ...
Ajoute un somme = 0; avant ta boucle pour voir ;)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 30-05-2006 à 12:44:06    

pas mieux :/
 
en fait le but est de faire un controle de formulaire. Chaque champ est controlé dynamiquement par expression réguliere. Le but etant de crééer un tableau en paralelle et de lui donner en clé le nom HTML du champ et en valeur 0 si l'expression réguliere a échouée et 1 si elle a réussie.
 
A la fin je fais une comparaison sur le nombre total de champs textes dans le formulaire, et je le compare avec la somme du tableau paralelle, S'ils sont egaux, je peux dégriser le bouton de validation. Ca te semble clair ?
 

Code :
  1. var FieldOK = 0 ;
  2. var OneError = false ;
  3. var somme = 0 ;
  4. function SwitchButtonState(Btn,State)
  5. {
  6. if( State )
  7. {
  8.  Btn.disabled = false ;
  9.  Btn.className = 'button_' ;
  10. }
  11. else
  12. {
  13.  Btn.disabled = true ;
  14.  Btn.className = 'button_disabled' ;
  15. }
  16. }
  17. function CheckField(FieldName)
  18. {
  19. var LengthForm = GetInputBoxInto(document.forms['new_item']) ;
  20. CheckField = new Array() ;
  21. RegExToCheck = GetExpressionFor( FieldName.name ) ;
  22. if( !RegExToCheck.test( FieldName.value ) )
  23. {
  24.  // Erreur sur les regex
  25.  OneError = true ;
  26.  document.getElementById( FieldName.name ).style.visibility = 'visible' ;
  27.  CheckField[FieldName.name] = 0 ;
  28. }
  29. else
  30. {
  31.  document.getElementById( FieldName.name ).style.visibility = 'hidden' ;
  32.  CheckField[FieldName.name] = 1 ;
  33. }
  34. alert( SommeOfArray( CheckField ) + ' et ' + LengthForm ) ;
  35. // Si le nombre de champs OK correspond au nombre de champ a remplir on dégrise
  36. if( SommeOfArray( CheckField ) == NbBox )
  37. {
  38.  SwitchButtonState(document.getElementById('BtnOk'),true);
  39.  }
  40.  else
  41. {
  42.    SwitchButtonState(document.getElementById('BtnOk'),false);
  43. }
  44. }
  45. function GetInputBoxInto(Formulaire)
  46. {
  47. NbBox = 0 ;
  48. i = -1;// du premier au dernier... faire...
  49. while (++i < Formulaire.elements.length)
  50. {
  51.  if(Formulaire.elements.item(i).type != 'button' && Formulaire.elements.item(i).type != 'submit')
  52.  {
  53.   NbBox++ ;
  54.  }
  55. }
  56. return NbBox ;
  57. }
  58. function SommeOfArray(ArrayPiece)
  59. {
  60. somme = 0 ;
  61. for (var i = 0 ; i <= ArrayPiece.length; i++)
  62. {
  63.         somme = somme + ArrayPiece[i];
  64. }
  65. return somme ;
  66. }


Message édité par the_bigboo le 30-05-2006 à 12:45:41
Reply

Marsh Posté le 30-05-2006 à 14:09:02    

Citation :

for (var i = 0 ; i <= ArrayPiece.length; i++)


 
Il y a une itération de trop et donc ArrayPiece[ArrayPiece.length] doit retourner un truc comme 'undefined'
 
i < ArrayPiece.length devrait mieu marcher


Message édité par Bidem le 30-05-2006 à 14:09:52
Reply

Marsh Posté le 30-05-2006 à 14:16:37    

non pas mieux :/
 
Il me dit que CheckField n'est pas une fonction  :cry:  :cry:


Message édité par the_bigboo le 30-05-2006 à 14:16:48
Reply

Marsh Posté le 30-05-2006 à 14:25:11    

héhé
 

Code :
  1. function CheckField(FieldName)
  2. {
  3.   ...
  4.   CheckField = new Array() ;
  5. }


 
ça sent le conflit entre ta fonction CheckField et ta variable du même nom...
Je crois que Javascript ne gère qu'un namespace pour les fonctions et les variables, donc il faut que tu utilises un autre nom pour ta variable


Message édité par Bidem le 30-05-2006 à 14:25:45
Reply

Marsh Posté le 30-05-2006 à 14:33:50    

< et pas <= (dans le source du début)
 
j'ai pas lu le reste.
 
en tout cas, le <= fait un dépassement de capacité dans le array, donc vu que js ne plante pas, il ajoute <portnawak> et nb + <portnawak> = NaN

Reply

Marsh Posté le 30-05-2006 à 14:34:34    

haaaaaaaaaa !!!! Bien vu l'artiste !

Reply

Marsh Posté le 30-05-2006 à 14:34:54    

/me retourne se coucher, la tempête est déjà loin en fait :D

Reply

Marsh Posté le 30-05-2006 à 14:35:23    

bidem avant déjà répondu avant en fait ;) idem pour ton autre problème de checkfield ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed