|
|
|
|
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;
}
}
}
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
Normal, tu reste a l'emplacement 0.
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 à artragis
|
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.
|
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
|