Problème d'affichage

Signaler
Messages postés
16
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
23 février 2021
-
Messages postés
16
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
23 février 2021
-
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

Messages postés
10449
Date d'inscription
samedi 19 août 2017
Statut
Membre
Dernière intervention
4 mars 2021
5 027
Bonjour,

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

Messages postés
16263
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 mars 2021
2 800
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.
Messages postés
16
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
23 février 2021

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"