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

avec Java Discussion :

Difficulté en java


Sujet :

avec Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 13
    Par défaut Difficulté en java
    Bonjour,
    Je dois créer une classe Mot qui permet de stocker une chaîne de caractères lue au clavier je dois le mettre dans le main.
    Je fais ceci mais je n'arrive plus ensuite à accéder au mot que je veux utiliser pour afficher ces voyelles par la suite dans une méthode afficheVoyelle séparée de la classe main.
    Il me met error: cannot find symbol
    mot=m;
    ^
    symbol: variable mot
    location: class Mot

    Quelqu'un peut-il m'aider, s'il vous plaît ?

    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
    import java.io.*;
    public class Mot{
    	char ch;
    	public static void main(String[] args) {
    		String mot = null ;
    		 try {
    		Reader isr = new InputStreamReader(System.in) ; 
    		BufferedReader br = new BufferedReader(isr) ;
    		 mot = br.readLine() ;
    		}
    	catch (IOException e) { }
    	}
    	public String toString(){
    		return mot;
    	}
    	public Mot(String m){
    		mot=m;
    	}
     
     
    }
    Fichiers attachés Fichiers attachés

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    La variable mot déclarée dans la méthode main est une variable locale : elle n'existe que dans la méthode où elle a été déclarée (déclarée = [C]type nom[/] comme String mot.

    Les autres méthodes (ainsi que les constructeurs) n'ont pas accès à cette variable : c'est comme si elle n'existait pas pour elles.

    Quand tu écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public String toString(){
    		return mot;
    	}
    	public Mot(String m){
    		mot=m;
    	}
    La variable mot n'existe pas pour la méthode toString() et le constructeur Mot(String). Il faut donc déclarer une variable mot visible par ces méthode et constructeur. On pourrait en faire une locale à chacune d'entre-elles, mais le but c'est que tu veux probablement que ça soit la même pour les deux, afin de stocker la valeur pour la classe Mot et la restituer en appelant toString() : dans ce cas, on doit déclarer une variable dans la classe : elle sera accessible par toute les méthodes et constructeurs, et ce sera bien une unique variable qui permettra donc de manipuler la même valeur :

    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
    import java.io.*;
    public class Mot{
    	char ch;
     
            private String mot; // la variable mot est visible dans toString() et Mot(String m)
     
    	public static void main(String[] args) {
    		String mot = null ;
    		 try {
    		Reader isr = new InputStreamReader(System.in) ; 
    		BufferedReader br = new BufferedReader(isr) ;
    		 mot = br.readLine() ;
    		}
    	catch (IOException e) { }
    	}
     
    	public String toString(){
    		return mot;
    	}
    	public Mot(String m){
    		mot=m;
    	}
     
    }
    On a maintenant 2 variables mot : une dans la classe Mot, et une dans la méthode main : ce sont 2 variables différentes et elles peuvent prendre indépendamment des valeurs différentes. Le but de ton programme est de saisir un mot et de le stocker dans la classe Mot : pour faire cela, il faut donc créer une instance de Mot, en lui passant le Mot saisi en paramètre du constructeur :

    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
    public static void main(String[] args) {
    		String mot = null ;
    		 try {
    	     	    Reader isr = new InputStreamReader(System.in) ; 
    		    BufferedReader br = new BufferedReader(isr) ;
    		     mot = br.readLine() ;
     
                        Mot motSaisi = new Mot(mot); 
     
                       motSaisi.afficheVoyelles(); // si tu ajoutes cette méthode à la classe Mot, tu peux maintenant l'appeler sur la variable motSaisi
     
    		}
    	catch (IOException e) { }
    	}
    }
    Par ailleurs, il serait probablement plus simple pour toi d'utiliser la classe Scanner pour récupérer la saisie au clavier. Voici l'équivalent de ton code avec la classe Scanner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static void main(String[] args) {
    		  Scanner scanner = new Scanner(System.in) ; 
    	     	   String mot = scanner.nextLine() ;
    	}
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 13
    Par défaut
    Merci beaucoup, cette partie marche enfin.

    Mais j'ai encore un problème. Je crée donc ma méthode afficheVoyelle() qui doit m'afficher ma voyelle. Donc je crée le code suivant qui n'est pas encore terminé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public char afficheVoyelles(){
    		for(int i=0;i<mot.length();i++){
    			ch=mot.charAt(i);
    			if (ch=="a"||ch=="e"||ch=="i"||ch=="o"||ch=="u"||ch=="y"){
    				char[] voyelle={ch};	
    			}
    		}
    	}
    Mais il me sort cette erreur:

    Mot.java:14: error: incomparable types: char and String
    if (ch=="a"||ch=="e"||ch=="i"||ch=="o"||ch=="u"||ch=="y"){


    Que dois-je faire pour que les deux types soient les mêmes ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    ch est déclarée comme char (d'ailleurs tu n'as pas besoin de le déclarer dans la classe, mais seulement dans la méthode, et ce serait mieux d'ailleurs).

    En Java la double-quote autour d'une expression sert à représenter une chaîne de caractères (donc plusieurs caractères), soit le type String : on ne peut pas comparer un char avec un String, ce que te dis le message d'erreur.

    En Java, on représente un caractère avec une simple quote devant et derrière : 'a' et non pas "a".

    Attention, parce que après tu écris :

    char[] est un tableau de caractères : et tu y mets un seul caractère. La variable est locale au if : elle n'existera pas en dehors du if.

    Si ton but est simplement d'afficher les voyelles, tu peux remplacer cette ligne par un System.out.print( ch ). Si tu as besoin d'avoir une présentation un peu particulière du type :
    Les voyelles dans le mot "catimini" sont : a, i, i, i.
    , il faudra jouer avec des booléens (pour savoir si c'est la première voyelle, donc afficher devant toutes la phrase, ou seulement une virguel...

    Ce sera en core plus compliqué si tu veux afficher
    Les voyelles dans le mot "catimini" sont : a, i.
    ou
    Les voyelles dans le mot "catimini" sont : a et i.
    Si ton but est de stocker les voyelles dans un tableau pour pouvoir faire ce genre d'affichage plus tard, ou un traitement quelconque, il faut stocker les valeurs dans les cases d'un tableau qui existe en dehors du if et même de la boucle : donc utiliser un index qu'on incrémente à chaque nouvelle voyelle ajoutée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int index=0;
    char[] voyelles = new char[mot.length]; // le nombre maximal de voyelles dans le mot est bien son nombre de caractères
    for(int i=0;i<mot.length();i++){
    			ch=mot.charAt(i);
    			if (ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u'||ch=='y'){
    				voyelles[index++]=ch;	// on incrémente index à chaque fois qu'on écrit dans une case, comme ça le coup suivant on écrit dans la case d'après (en plus index est le nombre de voyelles qu'on a mises dans le tableau
    			}
    		}
     
    System.out.println("Les voyelles sont :");
    for(int i=0;i<index; i++) {
        System.out.println(voyelles[i]);
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/02/2012, 11h35
  2. [MVC] Difficulté à apeler une méthode java dans <c:if test
    Par nullpointer dans le forum Spring Web
    Réponses: 0
    Dernier message: 06/05/2010, 14h01
  3. Quelques difficultés en programmation java
    Par dot-_-net dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 04/11/2008, 14h34
  4. Pensée Objet difficulté pour un projet Java
    Par Donaldo dans le forum Langage
    Réponses: 5
    Dernier message: 14/05/2007, 07h58
  5. Réponses: 3
    Dernier message: 25/08/2006, 15h57

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