[java]probleme boucle while

Fermé
Utilisateur anonyme - 8 oct. 2005 à 19:57
agonis57 Messages postés 44 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 9 octobre 2005 - 9 oct. 2005 à 09:45
bonjour à tous,
voilà j'ai un petit probléme, je fait un test sur 2 chaines de caractère, une que j'apelle texte, l'autre motif, je doit donc rechercher si le motif apparait dans le texte.
Le probléme c'est que ma boucle s'arréte dés qu'elle rencontre le premier caractère de mon motif par exemple si mon texte est "bbcb" et mon motif "ca", ma méthode me dira que le motif apparait bien dans le texte a la position 3 alors que théoriquement le motif ne devrai pas y étre. J'ai mis des System.out.println pour controlerle déroulement de la boucle,mais "fin" me renvoi toujours false alors qu'il devrait etre true pour que la boucle s'arréte.J'arrive pas à voir ou est le problème, qu'en je developpe l'algo à la main ca va, mais un truc doit m'échapper. Merci de votre aide
public/*@pure@*/  int naive(){
		k = -1;
		j = -1;		
		fin = false;	
		trouve = false;	
		
		
		while (!fin && !trouve){
			fin = (k == (longTexte(texte)-1) && j == longMotif(motif)-1 );
				if (!fin){	
					if(j == longMotif(motif)-1 ){
						j=0;
					 	k=k+1;
					 	trouve=compare(k,j);
						 System.out.println("tj"+k);
						 System.out.println("tt"+lm);
						
					 
			     	}//if
					else{
						k=k+1; j=j+1;
						trouve=compare(k,j);
						System.out.println("uu"+k);
							 System.out.println("ti"+j);
							 System.out.println("fin "+fin);
							 System.out.println("trouve "+trouve);
						
						
										
				}//else
			}//if			
		}//while		
			
		
		
		if (trouve == true  ){
			//la position du motif est k+1, on compte à partir de 1.
			pos = k + 1;
			System.out.println("le motif se trouve dans le texte à la position "+pos);
		}//if 
		
		else{
			System.out.println("le motif ne se trouve pas dans le texte.");
		}//else
		
		
		return k;
		
	}//naive
		
	public boolean compare (int l, int m){
		identik  = ( texte.charAt(l) == motif.charAt(m));
		//if (identik == false) j=-1;
			
		return identik;
	}
A voir également:

1 réponse

agonis57 Messages postés 44 Date d'inscription samedi 1 octobre 2005 Statut Membre Dernière intervention 9 octobre 2005 1
9 oct. 2005 à 09:45
première chose, refais ton parenthesage a ce niveau, il en manque
fin = (k == (longTexte(texte)-1) && (j == longMotif(motif)-1 ));

Ensuite, il y a un truc qui me parait bizarre. j'ai l'impression que tu incrémente j même quand motif(j) il n'est pas trouvé dans texte, ce qui ne devrait pas etre le cas : il faut rester sur le premier caractere du motif tant que tu ne l'a pas trouvé

ensuite tu as écrit 
trouve=compare(k,j)
, ce qui est faut, c'est motif[j] et texte[k] qu'il faut comparer.

en gros, l'algo, je te le dit, devrait être beaucoup plu scompliqué !!!!!!

à mon avis tu devrais le revoir sur papier parce qu'il est loin de marcher
0