Bonjour tout le monde j'ai un exo de programmation en licence 1 d'informatique (donc on va dire que nous somme au commencement).
Nous n'avons pas encore vu les traitement de chaine de caractère en cours mais je veux me mettre en avance.
je vous ai mis l'énoncé
j'ai decoupé en deux sous algo et un programme principal mais ce n'est pas encore fini je ne traite que deux point de l'exo. mais pour l'execution du deuxime sous algo j'ai une erreur, pas de compilation mais d'execution. soit disant que je traite une chaine vide, le pb est peut etre tout bete mais je ne trouve vraiment pas :
le but est de supprimer toute les voyelles du nom dc je parcours toute les lettre et je fais un traitement si c'est une voyelle.Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 10
at java.lang.String.substring(Unknown Source)
at soundex.vowel(soundex.java:45)
at soundex.main(soundex.java:68)
Je vous laisse juger
Merci par avance pour votre aide.
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 //~ Le Soundex Code est utilisé par les administrations américaines pour regrouper sous un même //~ code les noms ayant des consonnances voisines. Le code que nous considèrons ici //~ en est une version simplifiée, il associe à un nom l'abbréviation obtenue en applicant les quatres règles suivantes : //~ a) Conserver la 1ere lettre du nom //~ b) Supprimer toutes les voyelles apparaissent ensuite //~ c) Remplace les lettres doublées par une seule //~ d) 4 lettres max //~ Dupont ---> DPNT //~ Lloyd ---> LD //~ Rastatopoulos ---> RSTT public class soundex{ public static char firstChar(String name){ /*Var*/ char first; /*Body*/ first = (name.charAt(0)); return first; } public static String vowel(String name){ //Suppression de toutes les voyelles : traite le nom mais pas la premiere lettre quelqu'elle soit /*Var*/ String name_without_vowel= " " , name2; int cpt; int length; char char_current; /*Body*/ name = name.substring(1); // exlus la premiere lettre System.out.println(name); length = name.length(); // mesure la taille de 'name' sans la premiere lettre System.out.println(length); name2=name; String str=""; for(cpt=0;cpt<=length;cpt++){ char_current=name2.charAt(cpt); System.out.println(cpt); if((char_current=='a' || char_current=='e' || char_current=='i' || char_current=='o' || char_current=='u' || char_current=='y' )){ System.out.println("dans le if"); name2 = name2.substring(cpt+1,length); name = name.substring(0,cpt); name2 = name.concat(name2); cpt=-1/*cpt-1*/; //-1 pour recommencer le test a la premiere lettre ou 'cpt-1' pour reprendre le test System.out.println(name2); } System.out.println("hors du if"); } name_without_vowel= name2; return name_without_vowel; } public static void main (String [] args){ /*Var*/ String Name; /*Body*/ System.out.println("Nom : "); Name= Clavier.readString(); //System.out.println(firstChar(Name)); System.out.println(vowel(Name)); } }
Ps : pour l'exécution j'ai une classe toute faite pour la saisie au clavier dc il vous sera impossible de l'exécuter cependant l'erreur devrait vous être relativement repérable je l'espère.
Partager