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 :

Problème avec la fonction charAt()


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut Problème avec la fonction charAt()
    Bonjour,
    je suis nouveau sur le forum, et suis encore débutant en java, ce pourquoi je sollicite votre aide.
    En effet, dans mon programme j'ai un bout de code utilisant la fonction charAt.
    Mais je ne sais pas si c'est correct (peut-on remplir un tableau grace à la fonction charAt()?)
    Voici donc l'action en question, ayant pour but d'entrer chaque lettre une chaine de caractère dans un tableau:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static void ConversionTab (int Nblettre,       String Texte){
    	int ind;
    	char[] Tableau;
     
    	Tableau = new char[Nblettre]; // Nblettre est le ombre de lettre que l'utilisateur a saisi
     
    			for(ind=0;ind<Nblettre-1;ind+=1){
    						Tableau[ind] = Texte.charAt(ind);
    						System.out.print(Tableau);
    }
    }
    Voila voila.
    Merci d'avance pour vaut réponses,
    Cordialement

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 097
    Par défaut
    Bah oui c'est correcte en fait ? Mais quelle est le problème réelement ?

    Sinon ceci pourra aider a mon avis il y'a qlq modifications.

    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 snippet;
     
    public class Snippet {
    	public static void ConversionTab(int Nblettre, String Texte) {
    		int ind;
    		char[] Tableau;
     
    		Tableau = new char[Nblettre]; // Nblettre est le ombre de lettre que l'utilisateur a saisi
     
    		for (ind = 0; ind < Nblettre; ind += 1) {
    			Tableau[ind] = Texte.charAt(ind); // Lire un char et le mettre dans le tableau
    			System.out.println(Tableau[ind]); // affiche char par char
    		}
    		System.out.print("++-> " + new String(Tableau)); // Affiche le mot complet
    	}
     
    	public static void main(String args[]) {
    		ConversionTab(10, "0123456789");
    	}
    }
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Je vous remercie de votreréponse.
    Je me demandais si le fait d'écrire "Tableau[ind] = Texte.charAt(ind);" était correcte.
    Car quand j'appelle l'action dans une fonction, il y a une erreur lors de la compilation.
    Voici l'appel de l'action:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static void Menu( int Nblettre,String Texte ) {
    ConversionTab(Nblettre, Texte);
    }
    Et voici l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Crypteur.java:6: Menu(int,java.lang.String) in Crypteur cannot be applied to (int)
    	Menu(Choix);
    Je ne connais pas cette erreur, et ne vois pas vraiment le problème

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Par défaut
    Montre ton code en entier. Apparemment il y a une erreur à l'appel de la fonction

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Effectivement ce sera plus simple, je viens d'apporter quelques modifications.
    L'erreur est corrigé, mais le tableau ne s'affiche pas.
    Voici le code:
    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
    73
    74
    75
    76
    public class Test {
     
    public static void main (String [] args) {
    	int Choix=0;
    	int Nblettre=0;
    	String Texte="";
     
    	Menu(Nblettre, Texte);
     
     
    }											
     
    public static void Menu ( int Nblettre,String Texte ){  // Affiche le menu
    	int Choix;
     
    		System.out.print ("------------------------------------------------------------------------------------------------\n");
    		System.out.print ("|---------------------------------------------MENU--------------------------------------------|\n");
    		System.out.print ("------------------------------------------------------------------------------------------------\n\n\n");
    		System.out.print ("Bonjour, et bienvenue sur  un programme \n\n");
    		System.out.print ("Si vous souhaitez saisir votre nom, taper 1.\n Si vous souhaiter saisir votre prénom, taper 2.\n Pour quitter entrer 3.\n");
     
    		Choix=Clavier.saisirInt();
     
    			do{
    					switch (Choix){
    						case 1:
    							System.out.print (" Très bien, nous allons commencerr !"); 
     
    		SaisiTexte();
    		ConversionTab(Nblettre, Texte);
     
    						break;
     
    						case 2:
    							System.out.print (" Très bien, nous allons commencer !"); 
     
    						break;
     
    						case 3:
    							System.out.print ("Au revoir, et à bientôt ");
    						break;}
     
    			}while(Choix<0 || Choix >3);
     
     
    }
     
     
     
    public static void SaisiTexte(){
    	int ind;
    	int Nblettre;
    	String Texte;
     
     
    		System.out.print("Veuillez saisir votre nom:\n\n");
    		Texte=Clavier.saisirString();
    		Nblettre=Texte.length();
     
     
     
    }
     
    public static void ConversionTab (int Nblettre, String Texte){
    	int ind;
    	char[] Tableau;
     
    	Tableau = new char[Nblettre]; // Nblettre est le ombre de lettre que l'utilisateur a saisi
     
    			for(ind=0;ind<Nblettre-1;ind+=1){
    						Tableau[ind] = Texte.charAt(ind);
    						System.out.print(Tableau);
     
    }
    }
    }
    On dirait que la boucle de l'action ConversionTab ne se parcoure pas

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 097
    Par défaut
    On dirait que tu n'as pas bien regardé/compris ce que j'ai voulus mettre surtout

    Ou plutot que veux tu afficher en definitve, et quand ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Et bien je choisi l'option trois, je dois être très fatigué, parce que je ne vois pas le truc.

    Voila le nouveau code:

    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
    73
    74
    75
    76
    77
    78
    public class Test {
     
    public static void main (String [] args) {
    	int Choix=0;
    	int Nblettre=0;
    	String Texte="";
     
    	Menu(Nblettre, Texte);
     
     
    }											
     
    public static void Menu ( int Nblettre,String Texte ){  // Affiche le menu
    	int Choix;
     
    		System.out.print ("------------------------------------------------------------------------------------------------\n");
    		System.out.print ("|---------------------------------------------MENU--------------------------------------------|\n");
    		System.out.print ("------------------------------------------------------------------------------------------------\n\n\n");
    		System.out.print ("Bonjour, et bienvenue sur  un programme \n\n");
    		System.out.print ("Si vous souhaitez saisir votre nom, taper 1.\n Si vous souhaiter saisir votre prénom, taper 2.\n Pour quitter entrer 3.\n");
     
    		Choix=Clavier.saisirInt();
     
    			do{
    					switch (Choix){
    						case 1:
    							System.out.print (" Très bien, nous allons commencerr !"); 
     
    		SaisiTexte();
    		ConversionTab(Nblettre, Texte);
     
    						break;
     
    						case 2:
    							System.out.print (" Très bien, nous allons commencer !"); 
     
    						break;
     
    						case 3:
    							System.out.print ("Au revoir, et à bientôt ");
    						break;}
     
    			}while(Choix<0 || Choix >3);
     
     
    }
     
     
     
    public static void SaisiTexte(){
    	int ind;
    	int Nblettre;
    	String Texte;
     
     
    		System.out.print("Veuillez saisir votre nom:\n\n");
    		Texte=Clavier.saisirString();
    		Nblettre=Texte.length();
     
     
     
    }
     
    public static void ConversionTab (int Nblettre, String Texte){
    	int ind;
    	char[] Tableau;
     
     
    	Tableau = new char[Nblettre]; // Nblettre est le nombre de lettre que l'utilisateur a saisi
     
    			for(ind=0;ind<Nblettre;ind+=1){
    						Tableau[ind] = Texte.charAt(ind);
    						System.out.println(Tableau[ind]);
     
    }
     
    }
    }
    Je voudrais afficher le tableau avec les caractères entrés, mais j'ai aucun affichage pour le moment

    Je pense que le problème vient du main, lors des déclarations de variables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static void main (String [] args) {
    	int Choix=0;
    	int Nblettre=0;
    	String Texte="";
     
    	Menu(Nblettre, Texte);
     
     
    }
    Lors de ma boucle for, le texte ne prend t-il pas la valeur null ?

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Voici une autre version du programme, qui aboutit au résultat souhaité.
    Mais toutefois la première version est plus propre, mieux découpé en fonction...
    J'aimerais donc touver le même résultat avec le code précédent.

    Voici le nouveau code, pas optimisé:

    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
    public class Test2 {
     
    public static void main (String [] args) {
    	int Choix=0;
    	int Nblettre=0;
    	String Texte="";
     
    	Menu(Nblettre, Texte);
     
     
    }											
     
    public static void Menu ( int Nblettre,String Texte ){  // Affiche le menu
    	int Choix;
     
    		System.out.print ("------------------------------------------------------------------------------------------------\n");
    		System.out.print ("|---------------------------------------------MENU--------------------------------------------|\n");
    		System.out.print ("------------------------------------------------------------------------------------------------\n\n\n");
    		System.out.print ("Bonjour, et bienvenue sur  un programme \n\n");
    		System.out.print ("Si vous souhaitez saisir votre nom, taper 1.\n Si vous souhaiter saisir votre prénom, taper 2.\n Pour quitter entrer 3.\n");
     
    		Choix=Clavier.saisirInt();
     
    			do{
    					switch (Choix){
    						case 1:
    							System.out.print (" Très bien, nous allons commencerr !"); 
     
    		SaisiTexte();
     
     
    						break;
     
    						case 2:
    							System.out.print (" Très bien, nous allons commencer !"); 
     
    						break;
     
    						case 3:
    							System.out.print ("Au revoir, et à bientôt ");
    						break;}
     
    			}while(Choix<0 || Choix >3);
     
     
    }
     
     
     
    public static void SaisiTexte(){
    	int ind;
    	int Nblettre;
    	String Texte;
    	char[] Tableau;
     
    		 // Nblettre est le nombre de lettre que l'utilisateur a saisi
     
    		System.out.print("Veuillez saisir votre nom:\n\n");
    		Texte=Clavier.saisirString();
    		Nblettre=Texte.length();
    		Tableau = new char[Nblettre];
     
    		for (ind = 0; ind < Nblettre; ind += 1) {
    			Tableau[ind] = Texte.charAt(ind); // Lire un char et le mettre dans le tableau
    			System.out.println(Tableau[ind]); // affiche char par char
    		}				
     
    }
     
    }

  9. #9
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    }while(Choix<0 || Choix >3);
    =>
    }while(!(Choix<0 || Choix >3));

  10. #10
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Bonjour,
    j'ai réussi à contourner le problème en gardant la version un peu moins optimisé, mais qui reste toutefois assez claire.

  11. #11
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Bonjour,

    Je suis curieux de savoir quelle est cette classe Clavier que vous utiliser dans votre programme et d'où vous la sortez.
    Sinon, je vous propose une version "propre" de votre code.
    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
    public class MonProgramme {
    	private int choix = 0;
    	private nbLettreNom = 0;
    	private String nom = "";
    	private Scanner scanner = new Scanner(System.in);
    	private boolean running = true;
     
    	public static void main (String [] args) {
    		MonProgramme monInstance =new MonProgramme();
    		monInstance.afficheMenu();
    	}											
     
    	public void afficheMenu (){  // Affiche le menu
    			System.out.print ("------------------------------------------------------------------------------------------------\n");
    			System.out.print ("|---------------------------------------------MENU--------------------------------------------|\n");
    			System.out.print ("------------------------------------------------------------------------------------------------\n\n\n");
    			System.out.print ("Bonjour, et bienvenue sur  un programme \n\n");
    			System.out.print ("Si vous souhaitez saisir votre nom, taper 1.\n Si vous souhaiter saisir votre prénom, taper 2.\n Pour quitter entrer 3.\n");
    			Choix=Clavier.saisirInt();
    			do()
    				switch (Choix){
    				case 1:
    					System.out.print (" Très bien, nous allons commencerr !");
    					saisiNom();
    				break;
    				case 2:
    					System.out.print (" Très bien, nous allons commencer !"); 
    					break;
    				case 3:
    					System.out.print ("Au revoir, et à bientôt ");
    					running = false;
    					break;
    				}
    			}while(running);
    	}
     
    	public void saisiNom(){
    		System.out.print("Veuillez saisir votre nom:\n\n");
    		nom= scanner.next();
    		char[] nomAsTable = texte.toCharArray();
    		nbLettreNom = nomAsTable.length;
    	} 
    }
    Faite attention aux conventions de nommage.
    Utilise de préférence les méthodes qui existes déjà au lieu de le refaire à la main. C'est la philosophie java. Coder une fois, utiliser pour toujours.


    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  12. #12
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    Bonsoir,
    merci du conseille, et c'est sur qu'il vaut mieux prendre les bonne habitudes dès le début
    La classe Clavier que j'utilise est une classe qui a été créé par ma fac afin de nous simplifier "la vie".
    Au lieu de rentrer des lignes de code, on mais juste le nom de la variable qui doit se faire compléter, =Clavier.saisirType();

    Un exemple, si je doit faire tapper du texte à l'utilisateur, et l'enregistrer dans une variable Text, on fait simplement:

    Text=Clavier.saisirString();

    Voila voila pour cette super classe

  13. #13
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    En réalité, je t'invite à lire et faire lire à l'enseignant de ta fac le lien suivant :
    Article complet: Supplique aux enseignants

    C'est un très bon article.
    Si vous regardez le code que je vous ai donnée précédemment, j'utilise la classe Scanner. Et la lecture d'une ligne ne me prend pas plus de temps qu'à vous.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  14. #14
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Par défaut
    En effet, l'article est très claire.
    Il n'y a rien à ajouter, mais plutôt à bannir cette classe, qui soit disant simplifie les codes.
    Merci pour cet article que je essayer de faire passer dans mon université.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33
  2. Problème avec la fonction findfirst ()
    Par Angelico dans le forum Windows
    Réponses: 3
    Dernier message: 05/08/2004, 20h40
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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