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

Java Discussion :

Tester si un mot est un anagramme de manière récursive


Sujet :

Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 61
    Points : 44
    Points
    44
    Par défaut Tester si un mot est un anagramme de manière récursive
    Bonjour,
    je suis étudiant et débutant en java, je cherche à écrire une fonction qui prend en paramètre 2 chaînes de caractères et teste si les mots sont des anagrammes ou non de manière récursive. Je dois utiliser une booléenne : public static boolean isAnagramRec(String s1, String s2)

    Pour effectuer cette fonction, je compte procéder de la manière suivante :
    dans le Main, j'initialise : static bolean check = false;

    1) mettre les 2 chaînes de caractères en minuscule

    2)tester si les 2 chaînes ont la même longueur

    3) si c'est le cas, si la longueur des 2 chaînes est de 1, on regarde si les 2 caractères sont identiques, si c'est le cas, on donne à check la valeur true

    4) si la longueur des chaînes est différente de 1, on trie les 2 chaînes de caractères par ordre croissant (cad dans l'ordre alphabétique : "bac"-> "abc"), pour k allant de 0 à [longueur de la chaîne de caractère], on teste si le premier élément de la première chaîne est égal à celui de la deuxième chaîne, si c'est le cas, on remplace le premier élément des 2 chaînes par "", cad, on supprime le premier élément de la chaîne, après cela, on appelle la fonction isAnagramRec(s1, s2)

    J'ai codé un programme(ci-dessous), cependant je n'arrive pas à trier les chaînes de caractères s1, et s2, j'ai l'impression que ce n'est pas possible car String est un Object, mais comment faire alors?

    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
    package tp_note_2;
     
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.List;
    import java.util.Scanner;
     
    public class Main {
    	Scanner scanner = new Scanner(System.in);
    	static boolean check = false;
     
    	public static void main(String[] args) {
    		Scanner scanner = new Scanner(System.in);
     
    		System.out.println("Quel est le premier mot que vous souhaitez prendre en paramètre?");
    		String s1 = scanner.nextLine();
    		System.out.println("Quel est le deuxième mot que vous souhaitez prendre en paramètre?");
    		String s2 = scanner.nextLine();
    		System.out.println(isAnagramRec(s1, s2));
    }
    public static boolean isAnagramRec(String s1, String s2) {
    		s1 = s1.toLowerCase();
    		s2 = s2.toLowerCase();
    		if (s1.length() == s2.length()) {
    			if (s1.length() == 1) {
    				if ((s1).compareTo(s2) == 0) {
    					check= true;
    				}
    			} else {
    				//On trie par ordre croissant s1 et s2
    				char[] lettres1 = s1.toCharArray();
    				Arrays.sort(lettres1);
    				s1="";
    				for(int k = 0; k < s1.length(); k ++) {
    					s1+=String.valueOf(lettres1[k]);
    				}
    				char[] lettres2 = s2.toCharArray();
    				Arrays.sort(lettres2);
    				s2="";
    				for(int k = 0; k < s2.length(); k ++) {
    					s2+=String.valueOf(lettres2[k]);
    				}
    				if (s1.charAt(0) == (s2.charAt(0))) {
    					s1 = s1.replace(String.valueOf(s1.charAt(0)), "");
    					s2 = s2.replace(String.valueOf(s2.charAt(0)), "");
    					isAnagramRec(s1, s2);
    				}
    			}
    		}
    		return check;
    	}
    Pourriez-vous m'aider s'il vous plaît? En vous remerciant d'avance.

  2. #2
    Membre habitué

    Homme Profil pro
    sans
    Inscrit en
    Octobre 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Octobre 2019
    Messages : 205
    Points : 139
    Points
    139
    Par défaut
    Salut
    Je connais pas java, mais dans d'autres langages une chaine peut etre traitée comme un tableau, et pour avoir tel caractère de la chaine (par exemple le 2eme) on peut souvent faire ça : lechar=machaine[2].

    Peut-être que c'est faisable non ?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    Salut,

    J'ai essayé, mais en java, les chaîne de caractères ne se comportent pas comme des tableaux.

    Merci quand même de ta réponse.

  4. #4
    Membre habitué

    Homme Profil pro
    sans
    Inscrit en
    Octobre 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Octobre 2019
    Messages : 205
    Points : 139
    Points
    139
    Par défaut
    Mais si la chaine est un objet, alors il a surement des variables accessibles non ?

    Est-ce que ça peut t'aider ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char charAt(int i) // Retourne le caractère à l’indice spécifié en paramètre.
     
    String substring(int d) // Sous-chaîne depuis d jusqu’à la fin
     
    String substring(int d, int f) //Sous-chaîne depuis d jusqu’au caractère d’indice f non inclus.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 631
    Points
    21 631
    Par défaut
    Hello,

    @amateurrpg : non mais c'est pas du tout la question, hein... On voit bien dans son code qu'il sait parfaitement comment récupérer un caractère d'une chaîne.

    Citation Envoyé par Gabriel_Enriquezdu67 Voir le message
    J'ai codé un programme(ci-dessous), cependant je n'arrive pas à trier les chaînes de caractères s1, et s2, j'ai l'impression que ce n'est pas possible car String est un Object,
    Drôle d'impression.

    Non, c'est juste que tu fais une boucle comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int k = 0; k < s1.length(); k ++) {
      s1+=String.valueOf(lettres1[k]);
    }
    Alors que juste avant tu as fait :

    Du coup, ben, s1.length() c'est la longueur de la chaîne vide, donc zéro et donc tu rentres jamais dans la boucle et la boucle ne fait rien.

    Il aurait mieux valu se baser sur lettres1.length .

    Au passage, c'est pas franchement évident en Java de tester récursivement qu'une chaîne est l'anagramme d'une autre, mais là je vois pas un traitement vraiment récursif. Si tu veux vérifier que les chaînes sont de même longueur, si tu veux les convertir en minuscules et si tu veux les trier, fais-le avant.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    @thelvin, merci beaucoup pour ta réponse, le programme fonctionne.

    En programmation, il faut bien faire attention aux variables que l'on utilise.

  7. #7
    Membre habitué

    Homme Profil pro
    sans
    Inscrit en
    Octobre 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Octobre 2019
    Messages : 205
    Points : 139
    Points
    139
    Par défaut
    Je m'étais fié à ça aussi :

    je n'arrive pas à trier les chaînes de caractères s1, et s2, j'ai l'impression que ce n'est pas possible car String est un Object,
    J'ai essayé, mais en java, les chaîne de caractères ne se comportent pas comme des tableaux.
    Bon bein désolé :/

    Je suis content que le problème soit résolu

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

Discussions similaires

  1. Expression reguliere : tester si un mot n'est pas dans chaine
    Par saluts92 dans le forum Dreamweaver
    Réponses: 25
    Dernier message: 17/02/2015, 15h59
  2. Tester si un mot est palindrome
    Par imeys dans le forum Langage
    Réponses: 2
    Dernier message: 22/11/2005, 15h03
  3. [XSL] Tester si la valeur est un entier dans un xml
    Par MrMaze dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/07/2003, 04h35
  4. Tester si un champ est NULL
    Par titititi007 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/06/2003, 10h17
  5. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 11h54

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