Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Mes questions en Java
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

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


Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

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 :
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.

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).
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

Citer : Posté le 25/08/2016 17:46 | #


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").
Ok d'accord, pas de problème.

Bref donc :
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.
C'est bien ce que j'avais cru comprendre.

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).
Le problème et justement que je n'ai même pas le temps d'entrer quoi que ce soit, qu'il m'affiche déjà cette erreur .
Au soir de votre vie, le seigneur ne comptera pas le nombre de fois ou vous êtes tombés, il comptera le nombre de fois ou vous vous êtes relevés.

Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

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 :
while (true) {
                    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) {}
                }


Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Gab.c Hors ligne Membre Points: 449 Défis: 0 Message

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 :
String str = new String();
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()
Au soir de votre vie, le seigneur ne comptera pas le nombre de fois ou vous êtes tombés, il comptera le nombre de fois ou vous vous êtes relevés.

Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 66 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd