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

Signaler
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
-
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
-
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
A voir également:

7 réponses

Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

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)
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Et
somme -= TotalCommande[TotalCommande.length-1];


?



-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
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
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
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
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

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)
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
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
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
Salut Orange73,

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

Un grand merci pour ton aide :)

A plus,

BBFUNK01