Bonsoir,
Je travaille actuellement sur un projet pour lequel je dois réutiliser un script php.
Je débute en c# et je galère pas mal pour faire la retranscription du php vers c#
En voulant débugger ce que j'ai fait, je lève une erreur au niveau d'une liste que je veux remplir dans une boucle for et je n'arrive pas à savoir comment résoudre ce problème :
Voici le code php :L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
Nom du paramètre : index
et ce que j'ai fait en c# :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 $distanceAuxMoyennes = array(); for($indValeur=0; $indValeur< $nbindividus; $indValeur++) { $valeurCourante = $valeurs[$indValeur]; for($indClasse=0;$indClasse<$nbClasse;$indClasse++) { $distanceAuxMoyennes[$indClasse] = pow(($moyenneParClasse[$indClasse] - $valeurCourante),2); } $minDistanceAuxMoyennes = min ($distanceAuxMoyennes); $rangMinDistanceAuxMoyennes = array_search($minDistanceAuxMoyennes, $distanceAuxMoyennes); $rangClassePrecDeValeurCourante = determineClasse($indValeur,$nbClasse, $compteurClasseIterationPrec ); if($rangMinDistanceAuxMoyennes!=$rangClassePrecDeValeurCourante) { $compteurClasseIterationCourante[$rangClassePrecDeValeurCourante]--; $compteurClasseIterationCourante[$rangMinDistanceAuxMoyennes] ++; } }
Donc en fait je n'arrive à faire en sorte que la valeur de ma liste se modifie à chaque tour.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 List<int> MeanDist = new List<int> (); for ( int IndValue = 0 ; IndValue < NbData ; IndValue++ ) { int CurrentValue = Data[IndValue]; for ( int IndClass = 0 ; IndClass < NbClass ; IndClass++ ) { MeanDist[IndClass] = ( (int) ( Math.Pow ( (double) ClassMean[IndClass] - (double) CurrentValue, 2 ) ) ); // j'ai déjà une erreur ici } List<int> MeanDistSort = new List<int> ( MeanDist ); MeanDistSort.Sort (); int MinimumMeanDist = MeanDistSort[0]; int IndexMinimumMeanDist = MeanDist.IndexOf ( MinimumMeanDist ); int IndexPreviousClassCurrentValue = DetermineClass ( IndValue, NbClass, ClassCounterPreviousIteration ); // DetermineClass est une méthode if ( IndexMinimumMeanDist != IndexPreviousClassCurrentValue ) { ClassCounterCurrentIteration[IndexPreviousClassCurrentValue]--; ClassCounterCurrentIteration[IndexMinimumMeanDist]++; } }
j'ai essayé avec :
mais le problème c'est qu'à chaque nouvelle itération j'ai un index qui se rajoute dans ma liste, alors que je souhaite juste modifier la valeur en fonction de l'index. En faite la taille de ma liste ne doit pas changer, c'est juste aux valeurs d'être modifiées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part MeanDist.add ( (int) ( Math.Pow ( (double) ClassMean[IndClass] - (double) CurrentValue, 2 ) ) );
J'ai utilisé des listes à la place des tableaux mais est-ce déjà la bonne solution ?
J'imagine que ce n'est pas très clair, c'est déjà pas super pour moi mais si vous aviez une idée pour me débloquer ce serait top.
Au pire, la question générale c'est comment faire pour utiliser et modifier une valeur de ma liste dans une boucle for à chaque nouvelle itération ?
En vous remerciant par avance.
Partager