Problème d'affichage

Fermé
ArmandAs_1998 Messages postés 16 Date d'inscription jeudi 21 janvier 2021 Statut Membre Dernière intervention 20 février 2022 - Modifié le 26 janv. 2021 à 12:12
ArmandAs_1998 Messages postés 16 Date d'inscription jeudi 21 janvier 2021 Statut Membre Dernière intervention 20 février 2022 - 23 févr. 2021 à 18:04
Bonjour,

J'ai besoin de déterminer un palindrome sans tenir compte des espaces/virgules/deux-points.
Je ne sais pas où se situe mon erreur ici (voir fin).


 public static void main(String []args) {
  String ch;
  Scanner s = new Scanner(System.in);
  System.out.print("Palindrome ?");
  ch= s.nextLine();
  
  int i=0, j=ch.length()-1;
  while (i!=j) {
   while (ch.charAt(i)==' ' || ch.charAt(i)==',' || ch.charAt(i)==':')
    i++;
   while (ch.charAt(j)==' ' || ch.charAt(j)==',' || ch.charAt(j)==':')
    j--;
   if (ch.charAt(i)==ch.charAt(j)) {
    i++;
    j--;
    if (i==j) {
     System.out.println(true);
     break;
    }
   } else {
    System.out.println(false);
    break;
   }
  }
 }


Palindrome ?TU L AS TROP ECRASE CESAR CE PORT SALUT
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 39
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:47)
at java.base/java.lang.String.charAt(String.java:693)
at TD4_ex5.main(TD4_ex5.java:28)

2 réponses

fermiparadoxx Messages postés 11645 Date d'inscription samedi 19 août 2017 Statut Membre Dernière intervention 8 juin 2022 5 958
Modifié le 26 janv. 2021 à 12:13
Bonjour,

Le distributeur automatique de réponses est en panne....
Donnez-vous au moins la peine de poser une question, en faisant une phrase !

0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
26 janv. 2021 à 13:41
Bonjour,

La condition d'arrêt de ta boucle c'est de tomber sur le caractère du milieu (i == j).
Mais cela ne peut fonctionner qu'avec un nombre impair de caractères.
Or ta saisie as un nombre pair de caractères, donc il n'y a pas de caractère de milieu, du coup ta boucle ne s'arrêtes pas et ça fait n'importe quoi.
0
ArmandAs_1998 Messages postés 16 Date d'inscription jeudi 21 janvier 2021 Statut Membre Dernière intervention 20 février 2022
23 févr. 2021 à 18:04
Mais lorsque je rajoute ma condition au début de la boucle,
if (ch.length()%2==0) {
				System.out.println(false);
				break;
			}

j'ai "false" comme résultat quand je rentre "TU L AS TROP ECRASE CESAR CE PORT SALUT" et l'erreur précédente en cas de "A MAN, A PLAN, A CANAL : PANAMA"
0