Problème Java et boucle

Fermé
artragis
Messages postés
481
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
6 avril 2010
- 11 sept. 2008 à 09:43
artragis
Messages postés
481
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
6 avril 2010
- 13 sept. 2008 à 17:01
Bonjour, ça fait plusieurs jours que je galère avec ce problème :
Je fais un petit programme simple qui crypte des messages selon des manières antiques (methode des carré parfait, clef de cesar, chagement de lettre en nombre, écrire à l'envers) jusqu'à maintenant, tout allait bien du côté des carrés parfaits, de l'écriture à l'envers( j'ai pas commencé les clefs de césar, pas encore eu le temps, mais ça va venir) par contre j'ai un problème avec le changement de lettre en nombre. Il y a quelque temps j'avais déjà des problèmes pour trouver la fonction qui m'aiderait à la comparaison des caractères, là je l'ai trouvée, je l'ai codée, éclipse ne voit aucune erreur, mais cependant, ça marche pas. C'est à dire? bah en fait lorsque je clique sur le boutton qui enclenche le cryptage, le boutton ne se relâche jamais, le programme bloque et Java Binary a une erreur que microsoft essaie de corriger (le site d'assistance) mais bon, Sun et MS c'est pas la même chose alors j'ai rien.
je pense que c'est un problème de boucle, mais je vois pas où (étant donné que la boucle de parcours de texte ets la même que pour les deux autres fonction...)

voici le code :
if(parent.MetAlphaNum.isSelected()){
			//déclaration de l'alphabet
			String alphabet[]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
			
			int i;
			int j=0;
			int comparaison=1;
			//comparaison et toutes les variables pour la lectur des caractère de la textBox
		
			char caraclu[]=new char[1];
			String str=new String(caraclu);
			
			//boucle for pour la lecture des caractères
			for(i=0;i<texteEntré.length();i++){
				caraclu[0]=texteEntré.charAt(i);
				if(Character.isLetter(caraclu[0])){
					comparaison=str.compareToIgnoreCase(alphabet[0]);
					
                               //boucle de comparaison des lettre, je pense que c'est celle là qui bug
                                             if(!(comparaison==0)){
						while(!(comparaison==0)){
							j++;
							comparaison=str.compareToIgnoreCase(alphabet[0]);
						}
					}
				}
                                  si le caractère est un espace ou une tabulation ou un saut de ligne
				else if(Character.isSpaceChar(caraclu[0])||Character.isWhitespace(caraclu[0])){
					j=27;
				}
				
                              //et si c'est un chiffre

                              else if(Character.isDigit(caraclu[0])){
					
					 
			         
					j=28+caraclu[0];
				}
				textecodé=textecodé+" "+j;
				
			}
			
			
			}
		
			
		}


pour la boucle que j'ai souligné je pense que c'est celle qui bug, mais je vois pas pourquoi parce que avec un algo :
tant que non comparaison=0 faire
j<==j+1
comparaison<==comparer le caractère de la text box au caractère à l'emplacement alphabet[j] (retourne 0 si c'est egal)
fin tant que

6 réponses

freto
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
165
11 sept. 2008 à 09:49
Normal, tu reste a l'emplacement 0.
Essaie sa:
j=0;
comparaison=str.compareToIgnoreCase(alphabet[j]);
					
                               //boucle de comparaison des lettre, je pense que c'est celle là qui bug
                                             if(!(comparaison==0)){
						while(!(comparaison==0)){
							j++;
							comparaison=str.compareToIgnoreCase(alphabet[j]);
						}
					}
				}

Sa devrait aller mieux
-1
artragis
Messages postés
481
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
6 avril 2010
145
11 sept. 2008 à 09:53
==>et dire que je l'avais pas vu lol désolé, vraiment lol (on peut vraiment dire lol là )
-1
freto
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
165
11 sept. 2008 à 09:56
Ha beh lol lol et lol alors xD
Sa arrive a tout le monde (enfin tous les développeurs), le tout c'est de prendre un peu de recul par rapport a son code....
N'oublie pas de cocher la case Résolu de ton topic, si ce n'est déjà fait
-1
artragis
Messages postés
481
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
6 avril 2010
145
11 sept. 2008 à 09:56
et devinez quoi : problème lors de l'exécution :
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 26
	at MoteurCrypto.actionPerformed(MoteurCrypto.java:74)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

la ligne 74 c'est celle avec le changement (le 0 en j), je pense que c'est parce que mon texte contient simplement un "à" qui ne rentre pas dans l'alphabet que j'ai donné, enfin, si le compare ignore case ne le prend pas en compte c'est ça.
-1
Marco la baraque
Messages postés
996
Date d'inscription
vendredi 9 mai 2008
Statut
Contributeur
Dernière intervention
5 novembre 2009
327
11 sept. 2008 à 10:04
Hello,
Ouai, si le caractère n'est pas dans ta liste, au dernier tour de boucle il va rester ici et essayer de lire le caractère n+1 (mais ton tableau ne contient que n caractères).

Tu peux changer while(!(comparaison==0)) en while(comparaison!=0 && j<alphabet.length), et gérer le cas critique avec un if derrière si tu veux effectuer un traitement spécial.

Cordialement
-1
artragis
Messages postés
481
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
6 avril 2010
145
11 sept. 2008 à 10:20
bon voila, le projavascript:;gramme ne bloque plus, par contre le résultat n'est pas le bon donc désormais j'ai ça
	if(Character.isLetter(caraclu[0])){
					comparaison=str.compareToIgnoreCase(alphabet[0]);
					if(!(comparaison==0)){
						while(!(comparaison==0)&&j<alphabet.length-1){
							j++;
							comparaison=str.compareToIgnoreCase(alphabet[j]);
						}
						if (comparaison>0){
							j=25+comparaison;
						}
						else if(comparaison<0){
							j=25-2*comparaison;
						}
					}
				}

et quand je crypte le texte "entrer le texte à crypter" ça me donne :
 269 219 219 219 219 219 27 219 219 27 219 219 219 219 219 27 219 27 219 219 219 219 219 219 219
-1
artragis
Messages postés
481
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
6 avril 2010
145
11 sept. 2008 à 11:36
quelqu'un peut m'aider, parce que si je réussi pas pour ça, ça va être encore plus dur pour la méthode de Cesar
-1
freto
Messages postés
1542
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
165 > artragis
Messages postés
481
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
6 avril 2010

11 sept. 2008 à 11:41
Je pense que quelqu'un (peut etre moi) va te donner la solution, mais là, le problème vient de ton algo, donc faut aussi le temps de le regarder, de se l'approprier, et de comparer avec ce que l'on aurait fait à ta place
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
artragis
Messages postés
481
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
6 avril 2010
145
11 sept. 2008 à 11:42
ok désolé, étant donné la nature de ma première erreur, je pensais que c'était encore une connerie du genre. je vérifie aussi de mon côté.
merci encore
-1
artragis
Messages postés
481
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
6 avril 2010
145
12 sept. 2008 à 18:03
juste pour me tenir au courant? vous n'avez toujours pas de réponse de votre côté? j'ai refait mon algo, chaque itération, et je ne trouvep as le résultat de l'ordi, je ne comprends pas ce centaine
-1
artragis
Messages postés
481
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
6 avril 2010
145
13 sept. 2008 à 17:01
toujours pas de réponse???
-1