Problem en java
Fermé
kylleyoub
Messages postés
14
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
15 septembre 2012
-
4 févr. 2010 à 00:36
Utilisateur anonyme - 5 févr. 2010 à 03:41
Utilisateur anonyme - 5 févr. 2010 à 03:41
A voir également:
- Problem en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Java runtime - Télécharger - Langages
10 réponses
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
4 févr. 2010 à 01:08
4 févr. 2010 à 01:08
une chaine est un peu comme un tableau.
avec ton p.substring(i,2), tu regardes deux cases du "tableau" p : la ième et la i+1 ème (puisque tu regardes deux cases)
ceci risquera de causer une erreur plus tard.
Mais cela n'est pas la cause de l'erreur dont tu parles, puisqu'elle est détectée en ligne 15.
Je pense que le problème est que tu compares des chaines à l'aide de " == ", ce n'est pas comme ça qu'il faut faire avec les chaines... c.f. ton cours ;)
avec ton p.substring(i,2), tu regardes deux cases du "tableau" p : la ième et la i+1 ème (puisque tu regardes deux cases)
ceci risquera de causer une erreur plus tard.
Mais cela n'est pas la cause de l'erreur dont tu parles, puisqu'elle est détectée en ligne 15.
Je pense que le problème est que tu compares des chaines à l'aide de " == ", ce n'est pas comme ça qu'il faut faire avec les chaines... c.f. ton cours ;)
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
4 févr. 2010 à 03:07
4 févr. 2010 à 03:07
Hello,
Comme solution je te conseille de:
- Lire la chaîne entrée au clavier.
- Afficher cette chaîne pour valider qu'on l'a bien enregistré
- Utiliser la fonction split, qui te permet de découper une chaine de caractères via un séparateur, en un tableau de chaine, le séparateur étant ici l'espace
- utiliser de fait la fonction tableau.length pour connaître le nombre de mot de ta phrase
- faire une boucle à partir de ce tableau de chaînes et utilisation de la fonction "endsWith" pour savoir si le mot se termine par un S ou non.
J'essaie de te faire un exemple :-()
Comme solution je te conseille de:
- Lire la chaîne entrée au clavier.
- Afficher cette chaîne pour valider qu'on l'a bien enregistré
- Utiliser la fonction split, qui te permet de découper une chaine de caractères via un séparateur, en un tableau de chaine, le séparateur étant ici l'espace
- utiliser de fait la fonction tableau.length pour connaître le nombre de mot de ta phrase
- faire une boucle à partir de ce tableau de chaînes et utilisation de la fonction "endsWith" pour savoir si le mot se termine par un S ou non.
J'essaie de te faire un exemple :-()
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
4 févr. 2010 à 03:15
4 févr. 2010 à 03:15
Exemple de code dont tu peux t'inspirer :
Et le résultat dans la console:
Nombre de mot de la chaîne : 8
Nombre de mot se terminant par S dans la chaîne : 1
public class pipo { String chaine="Il fait beau today nest ce pas hein"; String[] splited; int compteur=0; public pipo() { splited=chaine.split(" "); System.out.println("Nombre de mot de la chaîne : "+splited.length); for(int i=0;i<splited.length;i++) if(splited[i].endsWith("s")) compteur++; System.out.println("Nombre de mot se terminant par S dans la chaîne : "+compteur); } public static void main(String[] args) { new pipo(); } }
Et le résultat dans la console:
Nombre de mot de la chaîne : 8
Nombre de mot se terminant par S dans la chaîne : 1
Utilisateur anonyme
4 févr. 2010 à 10:36
4 févr. 2010 à 10:36
Salut,
Si tu veux, voici ton code modifié, j'ai ajouté le code pour faire çà en utilisant REGEX et la méthode split de la classe pattern:
Cordialement,
Dan
Si tu veux, voici ton code modifié, j'ai ajouté le code pour faire çà en utilisant REGEX et la méthode split de la classe pattern:
import java.util.Scanner; import java.nio.charset.Charset; import java.io.*; import java.util.regex.Pattern; import java.util.regex.Matcher; public class SequenceCaracteres { /** * @param args */ public static void main(String[] args) { Scanner s = new Scanner(System.in); int nbreMots = 0, j = 0; System.out.print("\nsaisir la phrase: "); String p = s.nextLine(); System.out.println("Vous avez saisi: \"" + p + "\""); if(p.length() != 0) { p = p + " "; // au cas ou un dernier mot se terminant par 's' ne serait pas suivi d'un espace for(int i = 0; i<p.length(); i++) { if(p.substring(i,i+1).equals(" ")) { nbreMots++; if(i <p.length()) i++; } } for(int i = 0; i<p.length()-1; i++) { if(p.substring(i,i+2).equals("s ")) { j+= 1; } } System.out.println("\nla phrase comporte " + nbreMots + " mots"); System.out.println("\nla phrase comporte " + j + " mots se terminant par un 's'"); } else System.out.println("\nla phrase est vide!!!"); //REGEX // avec la methode split de la classe Pattern: if(p.length() != 0) { nbreMots = 0; j = 0; // compilation de la regex Pattern patern = Pattern.compile(" +"); // le séparateur est un ou plusieurs espaces (motif " +") // éclatement en sous-chaînes String[] sousChaine = patern.split(p); nbreMots = sousChaine.length; System.out.println("\n\nAvec SPLIT: la phrase comporte aussi " + nbreMots + " mots"); String lesMots = ""; for(int i = 0; i<sousChaine.length; i++) { if(sousChaine[i].endsWith("s")) { lesMots+= "-" + sousChaine[i] + "\n"; j++; } } System.out.println("\net la phrase comporte aussi " + j + " mots se terminant par un 's':\n" + lesMots); } else System.out.println("\n\nAvec SPLIT: la phrase est vide!!!"); // On peut aussi utiliser la classe StringTockenizer... } }
Cordialement,
Dan
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
kylleyoub
Messages postés
14
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
15 septembre 2012
5 févr. 2010 à 00:22
5 févr. 2010 à 00:22
merci beaucoup Pacorabanix j'ai compri votre remarque
bizire32
Messages postés
36
Date d'inscription
mardi 2 février 2010
Statut
Membre
Dernière intervention
25 mars 2010
5 févr. 2010 à 00:25
5 févr. 2010 à 00:25
mais tuot simplement length-1
kylleyoub
Messages postés
14
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
15 septembre 2012
5 févr. 2010 à 00:40
5 févr. 2010 à 00:40
merci bp arth jai compri votre programme ,il est simple et court
kylleyoub
Messages postés
14
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
15 septembre 2012
5 févr. 2010 à 00:49
5 févr. 2010 à 00:49
merci bp danimo je n'arrive po comprendre votre programme il est un peu compliq pr moi mai il sa march bien. merci encore
kylleyoub
Messages postés
14
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
15 septembre 2012
5 févr. 2010 à 00:51
5 févr. 2010 à 00:51
ui c sa , merci bizire32
Utilisateur anonyme
5 févr. 2010 à 03:41
5 févr. 2010 à 03:41
Salut,
En fait il y a 2 programmes dans un.
Le premier (class SequenceCaracteres1) en fait le tien modifié:
Et le second (class SequenceCaracteres2) en utilisant REGEX:
Cordialement,
Dan
En fait il y a 2 programmes dans un.
Le premier (class SequenceCaracteres1) en fait le tien modifié:
import java.util.Scanner; public class SequenceCaracteres1 { /** * @param args */ public static void main(String[] args) { Scanner s = new Scanner(System.in); int nbreMots = 0, j = 0; // j'ai remplacé cent par nbreMots qui est plus parlant System.out.print("\nsaisir la phrase: "); String p = s.nextLine(); // <<<<<<<<<<<<<<<< et non String p = s.next(); System.out.println("Vous avez saisi: \"" + p + "\""); // la ligne ci-dessous est ajoutée: p = p.trim(); // il ne doit pas y avoir d'espace(s) en début de phrase, trim permet de les supprimer // mais également a la fin de la phrase alors qu'il peut etre nécéssaire: // on ajoute donc un espace a la fin de la phrase au cas ou le dernier mot serait un mot terminé // par un 's' et qu'il doit etre suivi d'un espace puisqu'en réalité on chechera // les mots terminés par 's '. p = p + " "; // ajout de l'espace a la fin System.out.println("La phrase qu'on utilsera: \"" + p + "\""); if(p.length() != 0) { for(int i = 0; i<p.length(); i++) { if(p.substring(i,i+1).equals(" ")) // et non if(p.substring(i,1)==" ") // avec (i+1) ce qui évite de faire // int f=i+1; { nbreMots++; if(i <p.length()) // ce test n'est pas obligatoire mais permet d'éviter un tour de boucle { i++; // pour passer apres l'espace qu'on vient de trouver } } } for(int i = 0; i<p.length()-1; i++) // et non for(int i=0;i<p.length();i++) { if(p.substring(i,i+2).equals("s ")) // et non if(p.substring(i,2)=="s ") { j+= 1; // j'ai laissé j, on pouvait utiliser nbreMotS } } System.out.println("\nla phrase comporte " + nbreMots + " mot(s)"); System.out.println("\nla phrase comporte " + j + " mot(s) se terminant par un 's'"); } else System.out.println("\nla phrase est vide!!!"); } }
Et le second (class SequenceCaracteres2) en utilisant REGEX:
import java.util.Scanner; import java.util.regex.Pattern; import java.util.regex.Matcher; public class SequenceCaracteres2 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int nbreMots = 0, j = 0; System.out.print("\nsaisir la phrase: "); String p = s.nextLine(); System.out.println("Vous avez saisi: \"" + p + "\""); p = p.trim(); // la phrase ne doit pas comporter d'espaces au début //REGEX // avec la methode de la classe Pattern: if(p.length() != 0) // phrase non vide { // compilation de la regex Pattern patern = Pattern.compile(" +"); // le séparateur est un ou plusieurs espaces (motif " +") // éclatement en sous-chaînes String[] sousChaine = patern.split(p); nbreMots = sousChaine.length; System.out.println("\n\nLa phrase comporte " + nbreMots + " mot(s)"); String lesMots = ""; for(int i = 0; i<sousChaine.length; i++) { if(sousChaine[i].endsWith("s")) { lesMots+= "-" + sousChaine[i] + "\n"; j++; } } System.out.println("\nLa phrase comporte " + j + " mot(s) se terminant par un 's':\n" + lesMots); } else System.out.println("\n\nLa phrase est vide!!!"); // On peut aussi utiliser la classe StringTockenizer... } }
Cordialement,
Dan