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?
Pourriez-vous m'aider s'il vous plaît? En vous remerciant d'avance.
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; }
Partager