IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Rajouter variable dans fonction avec boucle


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 175
    Par défaut Rajouter variable dans fonction avec boucle
    bonjour,

    J ai une fonction comme ceci:

    FileWrite(v,v1,v2,v3,v4);

    Je cherche une solution avec une boucle qui ajouterai dans cette fonction une nouvelle variable.

    Exemple.

    For(i=0;i<3,i++)
    FileWrite(v,v1,v2,v3);


    For(i=0;i<4,i++)
    FileWrite(v,v1,v2,v3,v4);

    For(i=0;i<5,i++)
    FileWrite(v,v1,v2,v3,v4,v5);

    merci.


    etc...

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Je ne comprend pas trop ce que tu cherches à faire

    Quel est l'objectif de tout cela exactement ?

    a++

  3. #3
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    J'ai n'ai trop vraiment compris le besoin mais je pense avoir un début de réponse.
    FileWrite doit prendre un liste en paramètre plutôt.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void FileWrite(ArrayList<Integer> list){...}

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 175
    Par défaut
    La fonction et mise a dispo par un logiciel mais je ne peu pas la modifier, juste l'appeler sous cette forme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileWrite(v,v1,v2,v3,v4);
    1 variable = 1 colonne.

    Donc pour avoir 5 colonnes il faut mètre 5 variables.
    Le problème est que j'ai besoin de beaucoup de colonnes et de manière variable.
    Donc je pensais passer par une boucle pour faire varier le nombre de variables dans la fonction.

    mais j ai du mal a trouver le cheminement pour arriver a ca.

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ce genre là?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void fileWrite(int ... p){
      for (int i = 0; i < p.length; i++)
       // faire qqch avec p[i]

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 175
    Par défaut
    Non ce n est pas ce que je veu faire.

    C 'est plutot commeca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if(toto=2)
    FileWrite(v,v1);
     
    if(toto=3)
    FileWrite(v,v1,v2);
     
    if(toto=4)
    FileWrite(v,v1,v2,v3);
     
    if(toto=5)
    FileWrite(v,v1,v2,v3,v4);
    Selon la valeur de mon toto j'utilise la fonction avec X variables et comme j ai besoin d'un grand nombre de toto j aimerais faire çà dans une boucle pour éviter des centaine de lignes répétitives dans mon code.

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    donc si je suis biens

    -> FileWrite existe déjà et t'as pas le controle dessus. Il existe N versions de FileWrite prenant chacune en paramètre entre a et a+N arguments
    -> Suivant un parametre X, tu dois appeler la fonction qui a X argument, avec des valeurs, disons présentes dans un tableau. Je suis bien?


    Il y a fort à parier que FileWriter (u,v,a) est codé en interne comme FileWriter(u,v,a,null,null,null,null), donc dans ce cas, ceci devrais faire l'affaire:

    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
    Integer[] w tableau= ....;
    Integer a=b=c=d=e=f=null;
    u=...;
    v=...; // imaginons, toujours présents
    switch(x){
     case 6:
        f=w[5];
     case 5: 
        e=w[4];
     case 4:
        d=w[3];
     case 3:
        c=w[2]
     case 2:
        b=w[1];
     case 1:
        a=w[0];
     case 0:
        FileWrite(u,v,a,b,c,d,e,f);
        break;
     default:
        // erreur
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 175
    Par défaut
    Le probleme est aussi que la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileWrite(u,v,a,b,c,d,e,f);
    elle ne prend pas les tableaux.

    le principe de fonctionnement donerait ceci:

    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
     
    Integer a=b=c=d=e=f=null;
    u=...;
    v=...; // imaginons, toujours présents
    switch(x){
     case 6:
        f= FileWrite(u,v,a);
     case 5: 
        f= FileWrite(u,v,a);
     case 4:
        f= FileWrite(u,v,a,b);
     case 3:
        f= FileWrite(u,v,a,b,c);
     case 2:
        f= FileWrite(u,v,a,b,c,d);
     case 1:
        f= FileWrite(u,v,a,b,c,d,e);
     case 0:
        FileWrite(u,v,a,b,c,d,e,f);
        break;
     default:
        // erreur
    }
    Ce code est fonctionnel mais très lourd!!

    Je cherche a faire ça dans une boucle pour éviter d'écrire 150 fois la chose et de surcharger la prog.

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    la seule autre possibilité, c'est de revoir ton design! Mais comme on a pas le moindre bout de code actuel, on peux pas t'en dire plus.

  10. #10
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    En passant par la réflexivité :
    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
    	public void dispatch(Object... args) {
    		Class<?>[] parameterTypes = new Class<?>[args.length];
    		for (int i = 0; i < args.length; i++) {
    			parameterTypes[i] = Integer.class;
    		}
     
    		try {
    			Method method = getClass().getMethod("fileWrite", parameterTypes);
    			method.invoke(this, args);
    		} catch (SecurityException e) {
    			// erreur
    		} catch (NoSuchMethodException e) {
    			// erreur
    		} catch (IllegalArgumentException e) {
    			// erreur
    		} catch (IllegalAccessException e) {
    			// erreur
    		} catch (InvocationTargetException e) {
    			// erreur
    		}
    	}

  11. #11
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Autre solution : faire appeler ces méthodes par une méthode wrapper qui, elle, prend les tableaux ou les listes.

    (C'est ce que fait la réflexivité, au fond, mais pourquoi aller jusque là ?)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 175
    Par défaut
    Merci pour ces piste, vue mon niveau, entre la réflexivixitété et une méthode wwrarapeur j en est pour 2ans avant de comprendre comment ça marche. Ho moins j ai du biscuit.
    merci a tous.

  13. #13
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Euh, je veux bien que la réflexivité fasse peur, mais :

    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
    void wrapFileWrite(List<Integer> args) {
      switch(args.size()) {
      case 0:
        truc.fileWrite();
        break;
      case 1:
        truc.fileWrite(args.get(0));
        break;
      case 2:
        truc.fileWrite(args.get(1), args.get(2));
        break;
      case 3:
        truc.fileWrite(args.get(1), args.get(2), args.get(3));
        break;
      ...
      default:
        throw new IllegalArgumentException("Unsupported number of args: " + args.size());
     }
    }
    Tu programmes ça une fois, une seule, et ensuite au lieu d'appeler fileWrite() tu appelles wrapFileWrite().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Update dans fonction avec boucle
    Par YaNnTeB dans le forum Débuter
    Réponses: 1
    Dernier message: 21/03/2010, 17h35
  2. [Prototype] Passage de variables dans fonction
    Par Overstone dans le forum Bibliothèques & Frameworks
    Réponses: 7
    Dernier message: 09/06/2008, 16h52
  3. Réponses: 2
    Dernier message: 23/03/2007, 11h42
  4. passage de variable dans fonction
    Par nicerico dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 01/12/2006, 23h25
  5. variable dans fonction
    Par pierre371 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/05/2006, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo