Boucle pour additionner les nombres d'un array + affichage du total dans un text [Résolu]

Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Dernière intervention
20 juin 2014
- - Dernière réponse : BBFUNK01
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Dernière intervention
20 juin 2014
- 23 févr. 2010 à 11:18
Bonsoir à toutes et à tous,

j'essaie d'additionner les nombres contenus dans un array (nombres qui sont ajoutés dynamiquement à cet array) via une boucle et d'en afficher le total dans un champ de texte dynamique.
J'ai essayé plusieurs solutions mais jusqu'à présent je ne suis pas parvenu à obtenir le résultat escompté.

Voici mon code :
var TotalCommande:Array = new Array();

somme = 0;
for (var i:Number;i<length(TotalCommande);i++){
 somme += TotalCommande[i];
}

monChamp.text = somme;

btn_A.onPress = function(){
TotalCommande.push(50);
trace(somme);
}

btn_B.onPress = function(){
TotalCommande.push(100);
trace(somme);
}


Ce code-ci ne marche pas : mon "trace(somme)" me renvoie systématiquement "0" dans mon panneau sortie.

J'ai essayé en mettant :
for (var i:Number=0;i<length(TotalCommande);i++){
 somme += TotalCommande[i];
}


mais en faisant comme ça, mon "trace(somme)" me renvoie "NaN" dans mon panneau sortie, et monChamp.text affiche donc "NaN".

Bref, si jamais quelqu'un a une solution pour m'aider je serai ravi.

Merci,

BBFUNK01
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Dernière intervention
2 août 2011
3
Merci
Hello,

il faut utiliser une fonction pour updater la boucle à chaque fois que tu ajoute un element dans ton Array :

var TotalCommande:Array = new Array();
var somme:Number = 0;

function Calcul(pNum:Number):void
{
TotalCommande.push(pNum);

somme = 0;

for (var i:Number=0;i<TotalCommande.length;i++){
somme += TotalCommande[i];
}

trace(somme);
}

Calcul(50);
Calcul(100);


A+

-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 96 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Orange73
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Dernière intervention
2 août 2011
3
Merci
Et
somme -= TotalCommande[TotalCommande.length-1];


?



-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 96 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Orange73
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Dernière intervention
20 juin 2014
0
Merci
Salut Orange73,

tu es un prince !!! Je viens de tester ton code et ça fonctionne à la perfection :)
J'ai juste supprimé le ":void" sur la 1ère ligne car cela générait une erreur de compilation ("void" c'est en as3, non ?).
Enfin bref, c'est parfait, il ne me reste plus que quelques réglages à faire pour peaufiner mon script mais grâce à toi mon problème pour additionner mes valeurs est réglé.

Un grand merci :)

A plus,

BBFUNK01
Commenter la réponse de BBFUNK01
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Dernière intervention
20 juin 2014
0
Merci
Rebonjour Orange73,

j'ai adapté ton script afin de soustraire la dernière valeur pushée au total des valeurs contenues dans mon array.
Lorsque j'ai 2 valeurs dans mon array, la fonction soustrait bien la 2ème valeur ajoutée, mais lorsque j'ai 3 valeurs, la fonction soustrait les 2 dernières valeurs ajoutées. Je pense que j'ai mal spécifié dans la boucle quelle est la valeur [i] à soustraire de mon array ; à priori la boucle lit le tableau de [0] à [5] par exemple, j'ai donc essayé avec ce code :
function Soustrac(pNum:Number)
{
somme != 0;
for (var i:Number=0;i=TotalCommande.length-1;i++){
somme -= TotalCommande[i];
TotalCommande.pop();
}
trace(somme);
}

J'ai essayé également en inversant les valeurs de mon array dans l'idée de mettre (et donc de soustraire) la dernière valeur à la place de la première :
function Soustrac(pNum:Number)
{
somme != 0;
for (var i:Number=0;i<TotalCommande.length;i++){
                TotalCommande.reverse();
somme -= TotalCommande[i];
TotalCommande.reverse();
                TotalCommande.pop();
}
trace(somme);
}

mais sans résultat probant.

Existe-t'il donc une instruction permettant de dire :
for (var i:Number=0;i=="la dernière valeur ajoutée au tableau";i++)


Merci,

BBFUNK01
Commenter la réponse de BBFUNK01
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Dernière intervention
2 août 2011
0
Merci
Et juste avec sa ?

function Soustrac()
{
     somme -= TotalCommande[TotalCommande.length];
}



-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Commenter la réponse de Orange73
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Dernière intervention
20 juin 2014
0
Merci
Re Orange73,

je viens de tester et ça ne marche pas ; mon ChampText affiche "NaN", j'ai essayé aussi en faisant une fonction avec des conditions en fonction de la dernière valeur pushée, du genre :
function Soustract(){
somme != 0;
if(TotalCommande.push(50)){
somme -= 50;
}else if(TotalCommande.push(100)){
somme -= 100;
}
TotalCommande.pop();
}

mais ça ne soustrait rien du tout :), je pense que flash n'arrive pas à reconnaître la dernière valeur pushée dans cette fonction Soustract().

Bref, je continue à chercher mais si tu as des idées elles sont les bienvenues.

Et merci pour ta réponse rapide :)

BBFUNK01
Commenter la réponse de BBFUNK01
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Dernière intervention
20 juin 2014
0
Merci
Salut Orange73,

bingo : ça marche avec somme -= TotalCommande[TotalCommande.length-1] :)

Un grand merci pour ton aide :)

A plus,

BBFUNK01
Commenter la réponse de BBFUNK01

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.