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. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut debutant en recursivité.
    pour tous ceux qui débute en récursivité

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

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    bonjour, je viens de debuter dans la recursivité et j'aimeré programmer une procedure qui retourne le nombre de lettres composant une chaine de caractere ! voila mon code mais ça marche pas merci d'eclairer ma lanterne à ce sujet !

    MEthode Main :

    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
    import java.util.Scanner;
    public class chaine1 {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		String ch = "";
    		longueur l = new longueur();
    		ch = sc.nextLine();
    		l.longueur(ch);
    		}
     
    }


    Ma classe longueur :
    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
      public class longueur {
    	String ch ="";	
    	public int longueur(String ch){
    		this.ch = ch;	
    		if (ch == ""){
    				return 0;
    				}
    			else {
    				return 1+longueur(reste(ch));
    			}
    	}
    		String reste(String ch){
    			this.ch = ch.substring(1);
    			return ch;
     
    		}
    }

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Il ne faut pas utiliser une données membre de la classe ("ch") dans ta méthode récursive.

    PS : pense à la balise "CODE".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

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

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    excuse moi, j'ai pas l'impression d'avoir bien compris !
    merci

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29
    Par défaut
    un truc comme ca?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String plop = "monBeauString";
     
     
    			for(int i=0;i<plop.length();i++){
    				System.out.println("mon char en place"+i+" est "+plop.charAt(i));
    			}
    			System.out.println("taille total :"+plop.length());

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

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    oui je suis tout à fait d'accord avec toi, mais comme je fais de la récursivité j'ai pas le droit d'utiliser une boucle "for" .
    je dois utiliser une procédure ou fonction que j'ai appelé "longueur" qui fais à chaque étape appel à elle même !
    enfin c'est ce que j'ai lu dans mon cours ! lol

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class longueur
    {
      public int longueur(String ch)
      {
        if (ch.equals( "" ) )
        {
          return 0;
        }
        else
        {
          return 1 + longueur( substring( 1 ) );
        }
      }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

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

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    merci !! problème résolu
    mais j'aimerai bien comprendre,il fallait juste changer :

    ch = ""; par
    ch.equals ( "" );
    C'est quoi la différence ?
    merci d'avance !

  9. #9
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    == compare la référence de 2 objet (on regarde si ce sont les même physiquement ou pas). equals compare la valeur des 2 objets.
    Pour les types primitifs on peut utiliser ==.

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

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    cool merci pour ces explications !
    bonne après-midi !

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

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    enfait j'ai trouvé un petit souci en essayant de programmer une fonction qui detecte la presence d'un caractere par exemple "a" dans une chaine de caractere.
    dans ma boucle if (comme je fais ça par recursivité) le pc ne veut pas accepter:

    if (ch.charAt(1)= "a"){ // la il me soulgine une erreur!!
    return true;
    }else{.......//suite du code

    merci d'avance !

    _______________________________

  12. #12
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Normal : quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (ch.charAt(1)= "a"){
    tu compare un char (type primitif) à une chaine de caractère (objet). Il faut que tu écrives
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (ch.charAt(1)= 'a'){

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

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    ah oui c'est vrai, j'ai toujours ce problème moi.
    mais en fait même si j'ai rectifié ça me donne toujours une erreur, je te montre mon code pour voir plus clair :

    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
    package exo2;
    public class est_membre {
     
    		public boolean est_membre(String ch){
    			String a = "a";
    			if (ch.equals( "" )){
    				return false;
    			}else {
    				if (ch.charAt(0)='a'){
    					return true;
    				}else{
    					return est_membre(reste(ch));
    				}
    			}
     
    			}
    		public String reste(String sh){
    			sh = sh.substring(1);
    			return sh;
    		}
     
    		}
    voila l'erreur est toujours au même endroit !

  14. #14
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Oups légère erreur de ma part c'est :

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

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    okey, ça marche enfin ! merci c'est sympa !
    j'espere que d'ici quelques jours je reussirai l'algorithme des 8 reines !

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

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    j'ai rencontré un autre problème toujours avec mes recursivité sur les chaînes caractère :
    au bout d'un moment sur la condition if :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((ch.charAt(0)== ch2.charAt(0))){
    il m'affiche une erreur, pourtant c'est bien les "==" que je dois utiliser !
    ???

  17. #17
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Le plus simple quand tu as une erreur c'est de donner le message d'erreur précis parce que là ma boule de cristal ne dit rien .

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

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    voila enfait la fonction sert à calculer le nombre d'occurence d'un caractere dans une chaine :

    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
    package exo3;
    public class occurence {
     
    	public int occurence1(String ch,String ch2){
    		if (ch.equals( "" )){
    			return 0;
    		}else {
    			if ((ch.charAt(0)== ch2.charAt(0))){
    				return 1+occurence1(reste(ch),"");
    			}else{
    				return 0+occurence1(reste(ch),"");
    			}
    			}
    		}
    	public String reste(String sh){
    		sh = sh.substring(1);
    		return sh;
     
    	}
    }

    et voila ma methode MAIN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package exo3;
    import java.util.Scanner;
    public class chaine3 {
     
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		Scanner sc1 = new Scanner(System.in);
    		occurence o = new occurence();
    		System.out.println(o.occurence1((sc.nextLine()), (sc1.nextLine())));
     
     
    	}
     
    }

    et voila l'erreur :

    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(Unknown Source)
    at exo3.occurence.occurence1(occurence.java:8)
    at exo3.occurence.occurence1(occurence.java:9)
    at exo3.chaine3.main(chaine3.java:9)

  19. #19
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    C'est probablement qu'a un moment ta chaine ch2 contient 0 caractère donc ça plante quand tu fais

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

    Informations forums :
    Inscription : Février 2009
    Messages : 51
    Par défaut neeoo11
    mais ce qui me parait bizarre, c'est que mon ch2 n'intervient pas dans la recursivité enfin si mais je l'ai crée juste pour que ce soit moi qui puisse choisir la lettre à chercher dans ma chaine de caractère grâce à "Scanner" .
    donc ch2 ne peut jamais être vide !

    enfin je pense ! lol

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

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

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