Vérification d'une procédure [Résolu]

Signaler
Messages postés
58
Date d'inscription
lundi 1 novembre 2010
Statut
Membre
Dernière intervention
4 décembre 2018
-
Messages postés
58
Date d'inscription
lundi 1 novembre 2010
Statut
Membre
Dernière intervention
4 décembre 2018
-
salut voici mon fonction est il logique et jus t ?????
 double[] Henon_Lozi(double x0,double y0,int le_pas){
  // on peut utiliser : a 1.4 et b 0.3.

       double a=1.7 ;
       double b=0.5;
     double[] X =new double[v];
      X[0]=x0;
       double[] Y =new double[v];
       Y[0]=y0;
       if(le_pas==1){
       for ( i = 1; i < X.length; i++) {
         //double d = T[i];
         X[i]=1+Y[i-1]-a*(Math.abs(X[i-1]));
         Y[i]=b*X[i-1];
       }
     }else
       if(le_pas==2){
       while(i<v*2) {
        i=i+2;
         X[i]=1+Y[i-2]-a*(Math.abs(X[i-2]));
         Y[i]=b*X[i-2];
       }
     }else

       if(le_pas==3){
       while(i<v*3) {
        i=i+3;
         X[i]=1+Y[i-3]-a*(Math.abs(X[i-3]));
         Y[i]=b*X[i-3];
       }
     }else
          if(le_pas==4){
       while(i<v*4) {
        i=i+3;
         X[i]=1+Y[i-4]-a*(Math.abs(X[i-4]));
         Y[i]=b*X[i-4];
       }
     }
return(X);
}


quand j'appele a cette fonction j'ai erreur

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 31
tel que le_pas entre 1--5
aide mois svp

12 réponses

Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
private static final int DEEP_SIZE = 50; // je ne connais pas la valeur de 'v' mais ce ne peut être qu une constante vu sont emploi... dans tous les cas une variable externe à la porté courante doit toujours avoir un nommage explicite et clair...

private static final double CONST_A=1.7; 
private static final double CONST_B=0.5;

 double[] computeHenonLozi(double xFirst,double yFirst,int lePas){
  // on peut utiliser : a 1.4 et b 0.3.
       double[] x =new double[DEEP_SIZE];
       double[] y =new double[DEEP_SIZE];
       x[0]=xFirst;
       y[0]=yFirst;
       for ( int i = lePas; i < x.length; i+=lePas) {
         x[i]=1+y[i-lePas]-CONST_A*(Math.abs(x[i-lePas]));
         y[i]=CONST_B*x[i-lePas];
       }
  return(x);
}



Voici le travail maché... pffff
ceci est équivalent à tout ton code ... moins, bien sur les horreurs d'écritures et de raisonnements...



GodConan ;o)
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
295
Salut,

Les éléments des tableaux sont numérotés à partir de 0 donc

 for ( i = 0; i < X.length-1; i++) {
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
yo

-quel est la valeur de v?
-le respect des conventions...!!!
-pourquoi ce rateau?!! tous ce code se résume à une et une seule boucle FOR....


GodConan ;o)
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
295
Oui, effectivement, je n'avais pas lu le code précisément et tu peux utiliser ca :

 while(i<v*pas) {
        i+=pas;
         X[i]=1+Y[i-pas]-a*(Math.abs(X[i-pas]));
         Y[i]=b*X[i-pas];
Messages postés
58
Date d'inscription
lundi 1 novembre 2010
Statut
Membre
Dernière intervention
4 décembre 2018

salut

Monsieur GodConan merci a votre attention :
la valeur de v c'est 30
la convention de java ??? j'est pas compris " par ce que je suis une débutant "
je peut pas résumer ce code dans 1 seul boucle par ce que fonctionner sur la valeur de pas aussi for ila va incrémenter toujours par 1 .

Monsieur julien merci a votre proposition de cette solution le i incrémenter par 1 car il y a les valeur initial X0 ....etc
j'essayer ce code mais le méme probléme
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
ici ta bouvle ne fonctionne que pour un pas de 1 ...
puisse que dans tout les autres cas tu multipli la limite de i par le pas....
il te faut revoir to algo...
et je persiste ;o) : UNE seule boucle FOR...

la limite de parcour d un tableau reste toujours la meme ... SA TAILLE ...
sinon l "OutOfBoundsException" est inévitable.... ;o)

GodConan ;o)

Bweurk, je trouve dommage de faire un enchainement de if/else où les conditions sont des valeurs entières. Un bon vieux switch/case est plus propre et plus clair :) Et y'a moyen de factoriser le code car il y a pas mal de lignes redondantes où le peu de différence qu'il y a réside dans une petit valeur qui se trouve être ton pas.


--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
Messages postés
58
Date d'inscription
lundi 1 novembre 2010
Statut
Membre
Dernière intervention
4 décembre 2018

salut
merci a votre remarque
[list]

/listdans le cas le_pas égale a 1 c'est fonctionner bien mais avec au plus 2

[list]

dans le cas de plus if je ne considérer pas comme une faut j'ai pas compris /listpour quoi cette erreur malgré mon code est juste
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
et bien justement parce que ton code n est pas juste ;o)

GodConan ;o)
Messages postés
58
Date d'inscription
lundi 1 novembre 2010
Statut
Membre
Dernière intervention
4 décembre 2018

merci bcp de ta part bcp bcp tu donne moi grand aide merci

Clique sur "Réponse acceptée" sur le post de GodConan pour clore le sujet maintenant que ton problème est résolu :D


--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
Messages postés
58
Date d'inscription
lundi 1 novembre 2010
Statut
Membre
Dernière intervention
4 décembre 2018

ok