Mes questions en Java
Posté le 25/08/2016 17:17
Voilà le code :
package projet1;
import java.util.Scanner ;
public class sdz1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Hello world !") ;
Scanner sc = new Scanner(System.in) ;
char choix = 'O' ;
int conversion ;
double far, cel ;
do {
do {
System.out.println("\nChoisissez le mode de conversion :\n - 1: Celsius vers Fahrenheit\n - 2: Fahrenheit vers Celsius") ;
conversion = sc.nextInt() ;
}while (conversion != 1 && conversion != 2) ;
System.out.println("\nChoisissez la temperature à convertir :\n") ;
if (conversion == 1) {
cel = sc.nextInt() ;
far =(9/5)*cel+32 ;
System.out.println(cel + "° Celcius correspond à " + far + "° Fahrenheint.") ;
}
else {
far = sc.nextInt() ;
cel = ((far-32)*5)/9 ;
System.out.println(cel + "° Fahrenheint correspond à " + far + "° Celcius.") ;
}
do {
System.out.println("\nVoulez vous continuer (O/N) :") ;
choix = sc.nextLine().charAt(0) ;
}while (choix != 'N' && choix != 'O') ;
}while (choix == 'O') ;
System.out.println("Good by") ;
}
}
Et voilà l'erreur que je ne comprends pas :
Voulez vous continuer (O/N) :
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at projet1.sdz1.main(sdz1.java:36)
Merci pour votre attention
Citer : Posté le 25/08/2016 17:30 | #
Aaargh on ne met jamais d'espace avant un point virgule, on n'est pas en français è_é On met aussi un espace après une accolade (donc c'est "} while").
Bref donc :
at java.lang.String.charAt(Unknown Source)
at projet1.sdz1.main(sdz1.java:36)
signifie que tu as une exception (une erreur) qui est que l'index du string est hors des limites (en gros t'essaies d'accéder à un caractère du string qui n'existe pas).
La suite de l'erreur, qui s'appelle la "stack trace", te dit que ça vient de la méthode String.charAt, que tu appelles à la ligne 36, et qui est elle-même appelée par la fonction projet1.sdz1.main.
J'imagine que tu entres une ligne vide lors du sc.nextLine() ce qui fait qu'il peut pas prendre le premier caractère (normal c'est un string vide).
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 25/08/2016 17:46 | #
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at projet1.sdz1.main(sdz1.java:36)
signifie que tu as une exception (une erreur) qui est que l'index du string est hors des limites (en gros t'essaies d'accéder à un caractère du string qui n'existe pas).
La suite de l'erreur, qui s'appelle la "stack trace", te dit que ça vient de la méthode String.charAt, que tu appelles à la ligne 36, et qui est elle-même appelée par la fonction projet1.sdz1.main.
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 25/08/2016 18:09 | #
J'ai trouvé le bug : en fait c'est à cause du sc.nextInt. Je sais pas du tout ce qui cause le bug vu que je travaille pas beaucoup avec les scanners. Tu peux donc remplacer la première boucle par :
System.out.println("\nChoisissez le mode de conversion :\n - 1: Celsius vers Fahrenheit\n - 2: Fahrenheit vers Celsius") ;
try {
conversion = Integer.parseInt(sc.nextLine());
if (conversion == 1 || conversion == 2) {
break;
}
} catch (NumberFormatException e) {}
}
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 25/08/2016 18:40 | #
Merci pour ta solution .
Sinon, il suffisait de remplacer nextInt() par next() mais je ne comprends toujours pas pourquoi
Ajouté le 31/08/2016 à 18:16 :
Es ce qu'il existe une méthode de la class Object qui donne le nom de la class de l'objet à laquelle elle est appliqué.
Exemple :
System.out.print(str.name())
Affiche "String"
Avec name() la méthode que je recherche.
Ajouté le 31/08/2016 à 18:29 :
j'ai trouvé : getClass().getName()
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!