Java probleme java.lang.StringIndexOutOfBound
Résolu
artragis
Messages postés
510
Statut
Membre
-
artragis Messages postés 510 Statut Membre -
artragis Messages postés 510 Statut Membre -
Bonjour, dans un but personnel pour m'améliorer en programmation, je désire créer un programme qui me permet de crypter une suite de caractère selon la methode des carrés parfaits. Dans la vrai vie cette methode se fait ainsi car on utilise un nombre de caractère qui vaut un carré parfait (25/49/81/225 par exemple). On dessine un carré que l'o divise en carreaux, le nombre de carreaux vaut ce carré parfait, et il y a autant de carreaux en hauteur qu'en largeur. Puis on place les caractères en écrivant de haut en bas.
Avec Java, je désire faire la même chose, cependant ne pouvant pas faire un tableau bi dimentionnel, je propose une solution mathématiquement équivalente. à savoir
je calcule la racine carré puis
je prends les caractères par saut équivalents à cette racines carré et je recommence la boucle en décalant toujours de un caractère le début. sur le papier ça marche. par contre pour programmer... je fais ça :
la partie soulignée correspond à la ligne 84 du message qui repporte toutes les erreur lors de l'exécution de ce code.
Avec Java, je désire faire la même chose, cependant ne pouvant pas faire un tableau bi dimentionnel, je propose une solution mathématiquement équivalente. à savoir
je calcule la racine carré puis
je prends les caractères par saut équivalents à cette racines carré et je recommence la boucle en décalant toujours de un caractère le début. sur le papier ça marche. par contre pour programmer... je fais ça :
//MetCarré est un JRadioButton, déclaré dans la classe parente.
else if(parent.MetCarré.isSelected()){
//la je déclare mes variables
int racineEnt=0;
double racineCarré;
double lengt=texteEntré.length();
racineCarré=Math.sqrt(lengt);
char carré;
// là je créé la racine carré entière la plus proche, arrondie au suppérieur.
while (racineEnt<racineCarré){
racineEnt++;
}
//si la racineCarré est enière et donc que le nombre de caractère est un carré parfait alors exécuter la boucle sans caractère supplémentaires
if(racineCarré==racineEnt){
int lettre;
int groupe;
for(lettre=1;lettre<racineEnt;lettre++){
for(groupe=lettre;groupe<lengt;groupe+=racineEnt);
carré=texteEntré.charAt(groupe);
textecodé+=carré;
}
// si la racineCarré est inférieure à la racineEnt calculée alros on rajoutera des caractère, ' ' pour que le nombre total de caractère soit un carré parfait
la partie soulignée correspond à la ligne 84 du message qui repporte toutes les erreur lors de l'exécution de ce code.
Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 26
at java.lang.String.charAt(Unknown Source)
at MoteurCrypto.actionPerformed(MoteurCrypto.java:84)
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)
A voir également:
- Java probleme java.lang.StringIndexOutOfBound
- 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
4 réponses
il y a un ; en trop après le for (groupe ...); : les deux instructions qui suivent ne font pas partie de la boucle !
ce devrait être :
ce devrait être :
for(groupe=lettre;groupe<lengt;groupe+=racineEnt) {
carré=texteEntré.charAt(groupe);
textecodé+=carré;
}
oui je viens de le remarquer en fait... c'est bien ça qui buggait... j'avais mis un ; au lieu d'un {} encore desolé.
en tout cas je suis bien content que ça marche
en tout cas je suis bien content que ça marche