Problème Java et boucle
artragis
Messages postés
510
Statut
Membre
-
artragis Messages postés 510 Statut Membre -
artragis Messages postés 510 Statut Membre -
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 :
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 :
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
A voir également:
- Problème Java et boucle
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
6 réponses
Normal, tu reste a l'emplacement 0.
Essaie sa:
Sa devrait aller mieux
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
==>et dire que je l'avais pas vu lol désolé, vraiment lol (on peut vraiment dire lol là )
et devinez quoi : problème lors de l'exécution :
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.
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.
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
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
bon voila, le projavascript:;gramme ne bloque plus, par contre le résultat n'est pas le bon donc désormais j'ai ça
et quand je crypte le texte "entrer le texte à crypter" ça me donne :
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question