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 en recursivité.


Sujet :

Langage Java

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    bonjour,
    j'ai écris une fonction qui me retourne l'inverse d'une chaine de caractere :
    mais j'ai un problème avec ma boucle if :

    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
    public class retourne {
     
    		public String retourne1(String ch){
    			if (ch.equals( "" )){
    				return "rien";
    			}else {
    				return retourne1(reste(ch))+ch.charAt(0);
    			}
     
    			}
    		public String reste(String sh){
    			if (sh.equals( "" )){
    				return "c'est fini";
    			}else{
    			return sh.substring(1);
    			}
    		}
    		}

    le problème c'est que à chaque fois que j'entre une chaine pour avoir son inverse, il me retourne "rien" (qui représente ma condition terminale) + l'inverse de ma chaine même si j'ai rajouté la condition if dans la méthode "reste".
    vous avez une idée pour éviter cela ?

    merci !

  2. #22
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Par défaut
    ca ne serait pas mieux avec un null ? si aucune valeur tapée et juste initializée

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut
    D'autant que ch.equals("") provoquera un NullPointerException si ch est null. Quitte à comparer des String, il faut mieux mettre en première position le paramètre fixe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( ch == null || "".equals(ch) )

  4. #24
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    	at java.lang.String.substring(Unknown Source)
    	at java.lang.String.substring(Unknown Source)
    	at exo4.retourne.reste(retourne.java:17)
    	at exo4.retourne.retourne1(retourne.java:9)
    	at exo4.retourne.retourne1(retourne.java:9)
    	at exo4.retourne.retourne1(retourne.java:9)
    	at exo4.retourne.retourne1(retourne.java:9)
    	at exo4.retourne.retourne1(retourne.java:9)
    	at exo4.chaine4.main(chaine4.java:8)
    il me met ça comme erreur avec un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (ch.equals( null )){

  5. #25
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    JohnNC, j'ai essaye votre code, mais jé toujours le problème du "rien" qui apparait au début de ma chaine inversé !

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut
    Désolé, je n'ai pas lu le début du post Qu'est ce qui appelle la méthode "retourne1" ?

  7. #27
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    voila mon code :
    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
    public class retourne {
     
    		public String retourne1(String ch){
    			if ( ch == null || "".equals(ch) ){
    				return "rien";
    			}else {
    				return retourne1(reste(ch))+ch.charAt(0);
    			}
     
    			}
    		public String reste(String sh){
    			if (sh == "" ){
    				return "c'est fini";
    			}else{
    			return sh.substring(1);
    			}
    		}
    		}
    dans ma console quand je rentre par exemple : "je bois de l'eau", il me retourne : "rienje bois de l'eau" ! c'est le "rien" qui me gène !

  8. #28
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut
    Si le main est le même que ton premier post, tu fais 2 nextLine successif. Le second renvoyant null, tu obtiens "rien".
    Si ce n'est pas le cas, peux tu remettre le main correspondant à ta classe (son nom ayant changé) ?

    [Edit] Erf, je me mélange les pinceaux entre les codes que tu as posté (occurence, longueur et autre). Donc peut tu mettre le main correspondant ?

  9. #29
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    ah désolé j'ai modifié un peu mon main depuis,

    voila la derniere version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import java.util.Scanner;
    public class chaine4 {
     
    	public static void main(String[] args) {
    		retourne l = new retourne();
    		Scanner sc = new Scanner(System.in);
    		System.out.println(l.retourne1(sc.nextLine()));
     
     
    	}
     
    }

  10. #30
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut
    Je viens d'essayer, et il me retourne "rienuae'l ed siob ej". Le "rien" vient du dernier caractère, lorsqu'il ne reste que le "u" : "u".subString(1) retourne ""
    Le problème, c'est que c'est récursif:
    - Soit quand c'est fini, tu retourne "c'est fini", et dans ce cas, tu reboucle (ch contiendra "c'est fini")
    - Soit tu traite ce problème, et tu retourne null (ou "" ici). Mais dans ce cas, tu passes dans if ( ch == null || "".equals(ch) ).

    Il faut que tu trouve une condition pour sortir du traitement. Le mieux (pour moi)est d'enlever
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( ch == null || "".equals(ch) ){
    	return "rien";
    }

  11. #31
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    okey, c'est parfait merci pour les explications !!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Iteration VS recursivité
    Par yacinechaouche dans le forum C
    Réponses: 40
    Dernier message: 16/11/2012, 12h52
  2. Réponses: 7
    Dernier message: 26/11/2006, 22h15
  3. [Debutant XSLT] recursivité dans le xml ?
    Par zax-tfh dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 10/12/2005, 18h41
  4. [FLASH] pb debutant
    Par ultrakas dans le forum Flash
    Réponses: 2
    Dernier message: 05/06/2003, 01h48
  5. Réponses: 3
    Dernier message: 09/02/2003, 02h09

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