Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème comparer 2 caractères

Sujet résolu
    19 mars 2010 à 22:18:24

    Bonjour tout le monde,

    J4ai un problème selon java sur la comparaison entre 2 caractères. Je vous explique un peu mon programme pour mieux comprendre ce que je souhaite réaliser :
    Je prend une chaine au clavier, je souhaite mettre chaque caractère dans un tableau et que lorsque le caractère rencontré est un espace alors j'ajoute ou supprime ce mot dans un treeset. Ensuite je rappelle récursivement ma fonction avec l'indice ou je me suis arrêté et je continue tant qu'on atteint pas la taille de la chaine. Ce qui me donne ca :

    public static void test(int i, String mot, int choix, TreeSet <String> E, TreeSet <String> E1, char alphabet[])
    	{
    		int j = 0;
    		char tab[] = new char[4];
    		
    		while(mot.charAt(i) != ' ') // Ligne 59
    		{
    			tab[j] = mot.charAt(i);
    			j++;
    			i++;
    		}
    		String leMotConvertit = new String(tab);
    		
    		if(mot.isEmpty()) System.out.println("F est inchangé !!!");
    		else
    		{
    			if(motDansAlphabet(mot, alphabet))
    			{
    				operationAction(choix, E, leMotConvertit);
    				operationAction(choix, E1, leMotConvertit);
    			}
    			else System.out.println("Le mot saisit n'est pas correct car une ou plusieurs 
                                                     lettres ne font pas parties de l'alphabet !!!");
    		}
    		while(i < mot.length())Operation.test(i+1, mot, choix, E, E1, alphabet);
    	}
    


    Ce code me renvoie l'erreur suivante :

    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
    at java.lang.String.charAt(Unknown Source)
    at Operation.test(Operation.java:59)
    at Operation.affichage(Operation.java:32)
    at Main.main(Main.java:23)

    Merci de m'aider
    • Partager sur Facebook
    • Partager sur Twitter
      19 mars 2010 à 22:21:50

      while(mot.charAt(i) != ' ')
      

      si mot==null ?et si mot ne contient pas un espace ? </span>
      • Partager sur Facebook
      • Partager sur Twitter
        19 mars 2010 à 22:25:47

        Je réalise déjà le test dans mon main, en fait je lis une chaine au clavier ensuite je teste si elle est pas vide et si elle n'est pas vide j'appelle cette fonction.
        • Partager sur Facebook
        • Partager sur Twitter
          19 mars 2010 à 22:30:45

          il faut tester si la chaine contient un espace ou pas car un StringIndexOutOfBoundsException veut dire que ton indice à dépassé la longueur de ton String .
          • Partager sur Facebook
          • Partager sur Twitter
            19 mars 2010 à 22:37:34

            Il suffirait alors que je rajoute la condition suivante dans mon while : while((mot.charAt(i) != ' ') && (i < mot.length()-1)) comme ca s'il ne trouve pas d'espace il s'arrête quand il a atteint la longueur du mot. Je viens d'essayer cette méthode et en rentrant le mot ACG il me met AC après des carrés comme quand il connait pas la caractère.
            • Partager sur Facebook
            • Partager sur Twitter
              19 mars 2010 à 22:47:42

              Pour sortir de la boucle il y a 2 cas:
              • soit on a trouvé un espace
              • soit on a atteint la fin de la chaine sans trouver aucun espace

              Donc il faut changer le code pour qu'il traite les 2 cas ;) .</span>
              • Partager sur Facebook
              • Partager sur Twitter
                19 mars 2010 à 22:51:57

                J'ai trouvé d'où venait l'erreur, en fait j'avais oublié le -1 dans le while du bas qui de plus et un if en fait. Merci beaucoup pour ton aide.
                • Partager sur Facebook
                • Partager sur Twitter
                  20 mars 2010 à 20:44:04

                  Pourquoi le sujet n'est plus en résolu ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 mars 2010 à 12:04:32

                    En fait, j'ai voulu modifier mon code mais j'ai toujours cette erreur qui revient. Voilà mon nouveau code qui fait exactement comme l'ancien c'est à dire lire une chaine de caractère et récupérer chaque mot pour l'ajouter dans un treeSet.

                    public static void test(String mot, int choix, TreeSet <String> E, TreeSet <String> E1, char alphabet[])
                    	{
                    		int i = 0;
                    		int n = 0;
                    		String motBis;
                    		int lgr = mot.length() - 1;
                    		System.out.println(lgr);
                    				
                    			if(mot.isEmpty()) System.out.println("F est inchangé !!!");
                    			else
                    			{
                    				n = mot.indexOf(" ", i);
                    				
                    				if(n > -1) mot = mot.substring(i, n);
                    				
                    				if(motDansAlphabet(mot, alphabet))
                    				{
                    					operationAction(choix, E, mot);
                    					operationAction(choix, E1, mot);
                    					
                    					if(n > -1)
                    					{
                    						n++;
                    						motBis = mot.substring(n, lgr);
                    						Operation.test(motBis, choix, E, E1, alphabet);
                    					}
                    				}
                    				else System.out.println("Le mot saisit n'est pas correct car une ou   
                                                                       plusieurs lettres ne font pas parties de l'alphabet !!!");
                    			}
                    	}
                    
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Problème comparer 2 caractères

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown