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 :

[debutant]pb de return dans une méthode


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Points : 73
    Points
    73
    Par défaut [debutant]pb de return dans une méthode
    Bonjour,
    j'ai une méthode qui me permet de me renvoyer la valeur d'un entier qui est placée à la 3ème case d'une liste.
    Mais j'ai toujours une erreur concernant le type d'objet que doit retourner cette méthode "this method must return a result of type int" , pourtant j'ai bien mis return à la fin de ce code pour "valeur" qui est de type int
    Est-ce que vous auriez une explication?

    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
    public static int getRV(int V, int utilisateur) {
    	int[] RVList = new int[0];
    	int valeur = 0;
     
    	for (int[] dataLine : data) {
    		if (dataLine[3] == V) {
    			int[] newList = new int[RVList.length + 1];
     
    			for (int i = 0; i < RVList.length; i++) {
    				valeur = Integer.valueOf(dataLine[3]);
    			}
    		}
    		return valeur;
    	}
    }
    Merci!!!

  2. #2
    Membre éclairé

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Points : 803
    Points
    803
    Par défaut
    je vais peut etre dire une bétise mais je crois que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    valeur = Integer.valueOf(dataLine[3]);
    retourne un objet et non pas un int. ==> à vérifier

    edit:
    alors j'ai vérifier et effectivement tu renvois un objet mais ca n'est pas la l'erreur ;
    valueOf(int i)
    Returns a Integer instance representing the specified int value.
    source: http://java.sun.com/j2se/1.5.0/docs/api/
    deux choses : premierement dataline[3] est déja un int donc :
    devrai suffire
    deuxiemement ton return est a l'interieur de ton for donc si ta liste est vide tu ne retourne jamais de valeur d'ou ton erreur...

    voila l'analyse que j'ai faite mais je peux me tromper...
    "La seule chose dont je sois certain, c'est que je doute"
    j'ai cassé ma boule de cristal veuillez être clair et précis dans vos propos
    compilateur - 1 nayah - 0
    PS : je suis un

  3. #3
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    Imagine le cas où ta liste est vide.
    Dans ce cas on ne passe pas dans la boucle for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int[] dataLine : data)
    Donc on ne retourne rien.

    Ajoute un "return -1" par exemple en dehors de la boucle.
    .-*K.E.U.B*-.

  4. #4
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Points : 73
    Points
    73
    Par défaut
    Si ça retourne un objet, je dois faire comment pour que "valeur" récupére l'entier de la 3ème case de la liste?
    T'as une idée?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 230
    Points : 310
    Points
    310
    Par défaut
    Bonjour,

    Navré mais je ne comprends vraiment pas ton code...surtout les boucles.

    Pour récupérer le 3ème élement d'un tableau tu dois :
    - vérifier que le tableau contient bien au moins 3 éléments
    - récupérer le 3ème élément
    - éventuellement le formater

    A noter que l'index d'un tableau commence à 0. Pour récupérer le 3ème élément il faut faire tab[2].

    Ton pb de compil vient du fait que le return peut ne pas être atteint.

  6. #6
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Points : 73
    Points
    73
    Par défaut
    je viens de mettre valeur = dataLine[3], j'ai toujours la même erreur, donc ça vient probablement du cas où on ne retourne rien.
    je peux l'exprimer comment le return -1

  7. #7
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par Benouze Voir le message
    Bonjour,

    Navré mais je ne comprends vraiment pas ton code...surtout les boucles.

    Pour récupérer le 3ème élement d'un tableau tu dois :
    - vérifier que le tableau contient bien au moins 3 éléments
    - récupérer le 3ème élément
    - éventuellement le formater

    A noter que l'index d'un tableau commence à 0. Pour récupérer le 3ème élément il faut faire tab[2].

    Ton pb de compil vient du fait que le return peut ne pas être atteint.
    ----------
    En fait ma classe contient déja au début une autre méthode qui permet de parser un fichier et de créer (data = new int [items.size()][3], j'ai utilisé aussi un Tokenizer pour distinguer entre les 3 items (int V = Integer.parseInt(splitter.nextToken());...)
    et là ce que je veux c juste une simple méthode qui me retourne la valeur de l'entier V.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 230
    Points : 310
    Points
    310
    Par défaut
    Tu n'as qu'à déplacer ton return :

    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
    public static int getRV(int V, int utilisateur) {
    	int[] RVList = new int[0];
    	int valeur = 0;
     
    	for (int[] dataLine : data) {
    		if (dataLine[3] == V) {
    			int[] newList = new int[RVList.length + 1];
     
    			for (int i = 0; i < RVList.length; i++) {
    				valeur = Integer.valueOf(dataLine[3]);
    			}
    		}
    		// return valeur;
    	}
         return valeur;
    }
    A noter que je ne comprend toujours pas l'intérêt de tes 2 boucles for...ni celui de ton code en fait

    Si ton but c'est seulement de retourner le 3ème élément d'un tableau un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return Integer.valueOf(dataLine[2]);
    suffit...

  9. #9
    Membre éclairé

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Points : 803
    Points
    803
    Par défaut
    une petite question tu veux retourner que la valeur a la fin de ta boucle? ou toutes les valeurs que prendra ta variable "valeur" dans la boucle ?
    dans le premier cas benouze a raison...

    je suis pas sur d'avoir été clair la
    "La seule chose dont je sois certain, c'est que je doute"
    j'ai cassé ma boule de cristal veuillez être clair et précis dans vos propos
    compilateur - 1 nayah - 0
    PS : je suis un

  10. #10
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Points : 73
    Points
    73
    Par défaut
    En fait je veux récupérer toutes les valeurs que peut prendre "valeur" lors de l'exécution de la boucle.

  11. #11
    Membre éclairé

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Points : 803
    Points
    803
    Par défaut
    alors a ta place je mettrai la boucle principale dans le main et j'appellerai a chaque fois la méthode pour renvoyer une seule valeur

    ainsi tu retourne une valeur a chaque fois.
    "La seule chose dont je sois certain, c'est que je doute"
    j'ai cassé ma boule de cristal veuillez être clair et précis dans vos propos
    compilateur - 1 nayah - 0
    PS : je suis un

  12. #12
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Points : 73
    Points
    73
    Par défaut
    dans le programme principal, ça veut dire que je le mets dans le main ou dans la méthode du parseFile? (sachant que cette dernière méthode est de type void)

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 230
    Points : 310
    Points
    310
    Par défaut
    Citation Envoyé par flora806 Voir le message
    En fait je veux récupérer toutes les valeurs que peut prendre "valeur" lors de l'exécution de la boucle.
    Dans ce cas ce n'est pas un int mais un tableau de int que tu dois retourner.
    Là où se trouve ton return initial tu remplies ton tableau et à la fin de la méthode (là où moi j'ai mis le return) tu retournes le tableau.

  14. #14
    Membre éclairé

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Points : 803
    Points
    803
    Par défaut
    tu met ta premiere boucle dans le main et tu appelle la méthode getRV a chaque itération de la boucle , comme ca tu récupere toutes les valeurs et tu les traitent une par une

    edit: la solution de benouze est meilleure j'y avais pas penser
    "La seule chose dont je sois certain, c'est que je doute"
    j'ai cassé ma boule de cristal veuillez être clair et précis dans vos propos
    compilateur - 1 nayah - 0
    PS : je suis un

  15. #15
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par Benouze Voir le message
    Dans ce cas ce n'est pas un int mais un tableau de int que tu dois retourner.
    Là où se trouve ton return initial tu remplies ton tableau et à la fin de la méthode (là où moi j'ai mis le return) tu retournes le tableau.
    oui, c'est vrai, ça semble plus logique ta solution.
    en fait quand j'ai pensé à la méthode "static int getRV", c'est que à partir d'une autre classe je fais appel à cette méthode pour calculer la différence entre l'entier valeur et un autre entier qui est calculé par une autre méthode.
    ---------------
    int valeur = NomClasse.getRV(.....)
    int value2 = NomClasse2.getValue2(..)
    ......
    int Difference = math.abs(value-value2)

    donc si je fais un return de tableau pour "valeur", j'aurai un pb de type encore une fois

    Merci pour vos conseils et désolé pour mon niveau de débutant

  16. #16
    Membre éclairé

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Points : 803
    Points
    803
    Par défaut
    il y a une chose qui me chiffone si tu veux récuperer toutes les valeurs et réaliser un traitement sur chacune d'entre elle je vois pas comment c'est réalisable avec ton code actuel... par contre il est possible de renvoyer un tableau et de réliser ton traitement sur chacune des valeurs du tableau.

    au lieu d'appeller directement ta méthode tu appelle les éléments du tableau renvoyé par la méthode..

    heu... j'ai été clair ?

    Merci pour vos conseils et désolé pour mon niveau de débutant
    tu n'as pas a t'excuser on est tous passé par la et pour etre franc je dois etre aussi débutant que toi
    "La seule chose dont je sois certain, c'est que je doute"
    j'ai cassé ma boule de cristal veuillez être clair et précis dans vos propos
    compilateur - 1 nayah - 0
    PS : je suis un

  17. #17
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par nayah Voir le message
    il y a une chose qui me chiffone si tu veux récuperer toutes les valeurs et réaliser un traitement sur chacune d'entre elle je vois pas comment c'est réalisable avec ton code actuel... par contre il est possible de renvoyer un tableau et de réliser ton traitement sur chacune des valeurs du tableau.

    au lieu d'appeller directement ta méthode tu appelle les éléments du tableau renvoyé par la méthode..

    heu... j'ai été clair ?


    tu n'as pas a t'excuser on est tous passé par la et pour etre franc je dois etre aussi débutant que toi
    -----------

    Merci Nayah, mais je n'ai pas bien compris comment je pourrais appeler les éléments du tableau renvoyé par la méthode getRV

  18. #18
    Membre éclairé

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Points : 803
    Points
    803
    Par défaut
    Citation Envoyé par flora806 Voir le message
    -----------

    Merci Nayah, mais je n'ai pas bien compris comment je pourrais appeler les éléments du tableau renvoyé par la méthode getRV
    et bien je me trompe peut-etre mais disons que tu récupere un tableau x[] via ta méthode, je pense que tu pourra utiliser quelques chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i=0 ; i<size ; i++){
    valeur = x[i];
    //traitement de la valeur
    }
    size = taille de ton tableau

    je pense que comme ca tu pourras traiter toutes tes valeurs une par une.
    "La seule chose dont je sois certain, c'est que je doute"
    j'ai cassé ma boule de cristal veuillez être clair et précis dans vos propos
    compilateur - 1 nayah - 0
    PS : je suis un

  19. #19
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par nayah Voir le message
    et bien je me trompe peut-etre mais disons que tu récupere un tableau x[] via ta méthode, je pense que tu pourra utiliser quelques chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i=0 ; i<size ; i++){
    valeur = x[i];
    //traitement de la valeur
    }
    size = taille de ton tableau

    je pense que comme ca tu pourras traiter toutes tes valeurs une par une.
    ------------
    c'est bon, je n'ai plus l'erreur signalée par le compilateur concernant le "int result"
    j'ai mis finalement:

    {
    int [] RVList = new int[0];
    int valeur = 0;

    for (int[] dataLine : data)
    {
    if (RVList.length == 0)
    return 0;
    else
    {
    if (dataLine[2] == V)

    {

    for (int i=0; i < RealVoteList.length; i++)
    {
    valeur = dataLine[2];
    }
    }

    }

    }
    return valeur;

    }

    là j'ai d'autres exceptions "NullPointerException"...c'est parti pour une nouvelle galère en java
    Merci à Nayah et à tous!!!

  20. #20
    Membre éclairé

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Points : 803
    Points
    803
    Par défaut
    déja il y a quelque chose que je comprends pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int [] RVList = new int[0];
    ici tu créé un tableau dont la taille est nulle

    deuxieme chose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i=0; i < RealVoteList.length; i++)
    ton RealVoteList n'est instancié nulle part , si il est null tu peut avoir un "Nullpointeur exception
    "La seule chose dont je sois certain, c'est que je doute"
    j'ai cassé ma boule de cristal veuillez être clair et précis dans vos propos
    compilateur - 1 nayah - 0
    PS : je suis un

Discussions similaires

  1. passer la valeur d'un return dans une méthode
    Par belukrin dans le forum Langage
    Réponses: 1
    Dernier message: 25/03/2006, 06h58
  2. [Debutant] Mettre des images dans une Toolbar
    Par Beleim dans le forum Windows
    Réponses: 11
    Dernier message: 02/03/2006, 23h31
  3. [debutant] insertion d'éléments dans une List
    Par gwenou60 dans le forum Composants
    Réponses: 1
    Dernier message: 05/12/2005, 09h59
  4. [debutant] rajouter un applet dans une page JSP
    Par mlequim dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 11/07/2005, 14h50
  5. Réponses: 2
    Dernier message: 15/11/2004, 15h12

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