Rechercher : dans
Par :

Problème Java et boucle

Dernière réponse le 13 sep 2008 à 17:01:47 artragis, le 11 sep 2008 à 09:43:00 
 Signaler ce message aux modérateurs

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
Configuration: Windows Vista
Firefox 3.0.1

Meilleures réponses pour « problème Java et boucle » dans :
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
Installer Java sous Ubuntu VoirPar défaut, Firefox n'est pas fourni avec Java. Voici comment procéder pour l'installer: Ouvrez un terminal (Menu Applications > Accessoires > Terminal) et tapez: sudo aptitude install sun-java6-jre sun-java6-plugin ou sudo aptitude install ...
[Logiciel libre] Installation firefox 2.0+java+flash VoirInstallation firefox 2.0+java+flash en ligne de commande A. INTRODUCTION B. INSTALLATION FIREFOX 1. Création d'environnement 2. Téléchargement et vérification de la signature 3. Installation de Firefox 4. Démarrage de l'application C....
Télécharger Java Runtime Environment VoirJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces...
Java: Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditonnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...
Java: les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Java sont typées, c'est-à-dire que les données contenues dans...
Java - Les types de données VoirLes primitives Java est un langage orienté objet, c'est-à-dire que les éléments manipulés sont des classes, ou plus exactement des objets, c'est-à-dire des instances de classes. Toutefois ces objets contiennent des données possèdant un type (et...

1

freto, le 11 sep 2008 à 09:49:43

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 What's tiny, and yellow and very very dangerous?????
A canary with the super-user password.
Mouhahahaha

Répondre à freto

2

artragis, le 11 sep 2008 à 09:53:16

==>et dire que je l'avais pas vu lol désolé, vraiment lol (on peut vraiment dire lol là )

Répondre à artragis

4

freto, le 11 sep 2008 à 09:56:25

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 What's tiny, and yellow and very very dangerous?????
A canary with the super-user password.
Mouhahahaha

Répondre à freto

3

artragis, le 11 sep 2008 à 09:56:01

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.

Répondre à artragis

5

Marco la baraque, le 11 sep 2008 à 10:04:27

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 blogfrisbee point blogspot point com

Répondre à Marco la baraque

6

artragis, le 11 sep 2008 à 10:20:05

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

Répondre à artragis

7

artragis, le 11 sep 2008 à 11:36:38

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

Répondre à artragis

8

freto, le 11 sep 2008 à 11:41:09

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 What's tiny, and yellow and very very dangerous?????
A canary with the super-user password.
Mouhahahaha

Répondre à freto

9

artragis, le 11 sep 2008 à 11:42:16

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

Répondre à artragis

10

artragis, le 12 sep 2008 à 18:03:33

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

Répondre à artragis

11

 artragis, le 13 sep 2008 à 17:01:47

Toujours pas de réponse???

Répondre à artragis