pour tous ceux qui débute en récursivité
pour tous ceux qui débute en récursivité
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; } }
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.
excuse moi, j'ai pas l'impression d'avoir bien compris !
merci
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());
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
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.
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 !
== 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 ==.
cool merci pour ces explications !
bonne après-midi !
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 !
_______________________________
Normal : quand tu fais
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"){
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if (ch.charAt(1)= 'a'){
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 :
voila l'erreur est toujours au même endroit !
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; } }
Oups légère erreur de ma part c'est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (ch.charAt(0)=='a')
okey, ça marche enfin ! merci c'est sympa !
j'espere que d'ici quelques jours je reussirai l'algorithme des 8 reines !
![]()
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 :
il m'affiche une erreur, pourtant c'est bien les "==" que je dois utiliser !
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ((ch.charAt(0)== ch2.charAt(0))){
???![]()
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.
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)
C'est probablement qu'a un moment ta chaine ch2 contient 0 caractère donc ça plante quand tu fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ch2.charAt(0)
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
Partager