Erreur dans le code java
mm
-
mm -
mm -
Bonjour,
je suis entrain de développer une application en java sous eclipse j'ai un problème dans la méthode bintToDec qui permet de convertir un nombre binaire en un nombre décimale j'ai pas compris l'erreur voilà la méthode :
public int binToDec(String ch){
int p = 1;
int s = 0;
for (int i = ch.length(); i > 0; i--)
{
int x =Integer.valueOf(ch.charAt(i));
s = s+x*p ;
p =p*2;
}
System.out.println(s+"???????????????????????");
return s;
}
************
l'erreur :
Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 7
at java.lang.String.charAt(String.java:558)
at Regle.binToDec(Regle.java:157)
at Regle.toString_verif(Regle.java:237)
at fenetre.jButtonVerifier(fenetre.java:249)
at fenetre$14.actionPerformed(fenetre.java:1033)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:5517)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
at java.awt.Component.processEvent(Component.java:5282)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3984)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1791)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
je suis entrain de développer une application en java sous eclipse j'ai un problème dans la méthode bintToDec qui permet de convertir un nombre binaire en un nombre décimale j'ai pas compris l'erreur voilà la méthode :
public int binToDec(String ch){
int p = 1;
int s = 0;
for (int i = ch.length(); i > 0; i--)
{
int x =Integer.valueOf(ch.charAt(i));
s = s+x*p ;
p =p*2;
}
System.out.println(s+"???????????????????????");
return s;
}
************
l'erreur :
Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 7
at java.lang.String.charAt(String.java:558)
at Regle.binToDec(Regle.java:157)
at Regle.toString_verif(Regle.java:237)
at fenetre.jButtonVerifier(fenetre.java:249)
at fenetre$14.actionPerformed(fenetre.java:1033)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:5517)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
at java.awt.Component.processEvent(Component.java:5282)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3984)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1791)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
A voir également:
- Erreur dans le code java
- Code ascii - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code puk bloqué - Guide
1 réponse
Salut,
Essaye en commencant à partir de "i-1"
int i = ch.length() -1;
for (; i > 0; i--)
{
int x =Integer.valueOf(ch.charAt(i));
s = s+x*p ;
p =p*2;
}
OU
Je sais pas quel est ton niveau en programmation, mais
"int x =Integer.valueOf(ch.charAt(i));"
peut retourner une exception (sans certitude)
Donc il faut gerer l'exception
Essaye en commencant à partir de "i-1"
int i = ch.length() -1;
for (; i > 0; i--)
{
int x =Integer.valueOf(ch.charAt(i));
s = s+x*p ;
p =p*2;
}
OU
Je sais pas quel est ton niveau en programmation, mais
"int x =Integer.valueOf(ch.charAt(i));"
peut retourner une exception (sans certitude)
Donc il faut gerer l'exception
"Integer.valueOf(ch.charAt(i)); peut retourner une exception (sans certitude)"
En effet, ce sera dans le cas où i n'est pas dans l'intervalle (problème que l'on vient de régler) ou alors si ch ne contient pas que des chiffres. On peut aussi avoir le cas où ch vaut null, mais dans ce cas le programme aura planté avant (lors du ch.length par exemple)
public int binToDec(String ch){
try{
int p = 1;
int s = 0;
for (int i=ch.length()-1; i>=0; i--)
{
int x =Integer.valueOf(ch.charAt(i));
s = s+x*p ;
p =p*2;
}
System.out.println(s+"???????????????????????");
}
catch(IOException err){
err.getMessage();
}
return s;
}
est ce que vus pouvez m'aider svp et merci d'avance
Il n'y a aucune raison d'avoir une erreur sur les fichiers vu ce que tu fais !
Dans ton cas, la gestion d'exception n'est pas utile, s'il y en a une c'est que l'utilisateur a fait une faute grave, il vaut mieux la laisser se propager, plutôt que faire une récupération inutile qui va masquer l'exception (car err.getMessage() ne vas rien faire), et laisser tourner le programme alors que le résultat renvoyé sera faux puisque le calcul aura été incomplet !
En plus quand on ne les maîtrises pas, on commet des erreurs inutiles comme lorsque tu fais "return s" en dehors du try, alors que "s" y est déclaré à l'intérieur...
Normalement comme ceci, il ne devrait pas y avoir d'erreur de compilation :
Je n'ai pas testé pour savoir si ça faisait ce que tu voulais, mais ça semble pas trop mal...
Tu dois donc soustraire cette valeur à chaque fois, par exemple en faisant :