CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Besoin d'aide pour un programme [JAVA]

Klimex_x
Klimex_x
Niveau 1
05 mars 2018 à 19:15:45

Bonjour,
J'ai récemment écrit le programme suivant qui, je ne sais pas pourquoi, ne marche pas. Lorsque je clique sur run, il s'exécute, mais le message suivant apparaît après la question demandant si l'utilisateur veut recommencer (la ligne 41 est celle de "wantToRestart = sc.nextLine().charAt(0);").
"Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at fr.klimex.test1114.Main.main(Main.java:41)"

Et voici le programme :

package fr.monpseudo.monprojet;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numberOfAnswer;
int valueToConvert;
int convertedValue;
char wantToRestart = ' ';
do{
System.out.println("Programme de conversion de degrès Celsius en degrès Farenheit\n");
System.out.println("Voulez-vous : ");
System.out.println("1 : Convertir une température donnée en degrès Celsius en degrès Farenheit.");
System.out.println("2 : Convertir une température donnée en degrès Farenheit en degrès Celsius.\n");
System.out.println("Tapez 1 ou 2 pour effectuer votre choix");
numberOfAnswer = sc.nextInt();

while(numberOfAnswer != 1 && numberOfAnswer != 2) {
System.out.println("Erreur : vous n'avez pas donné un nombre correct. ");
System.out.println("Tapez 1 ou 2 pour choisir votre conversion");
numberOfAnswer = sc.nextInt();
}

System.out.println("Maintenant, veuillez donner la valeur à convertir");
valueToConvert = sc.nextInt();

if(numberOfAnswer == 1) {
convertedValue = (9/5)*valueToConvert+32;
System.out.println(valueToConvert + " degrès Celsius correspondent à " + convertedValue + " degrès Farenheit.");
}
else {
convertedValue = ((valueToConvert-32)*5)/9;
System.out.println(valueToConvert + " degrès Farenheit correspondent à " + convertedValue + "degrès Celsius");
}

do{
System.out.println("Souhaitez-vous convertir une autre température ?(O/N)");
wantToRestart = sc.nextLine().charAt(0);

}
while(wantToRestart != 'O' && wantToRestart != 'N');

if (wantToRestart == 'O') {
System.out.println("Vous avez choisi de recommencer.");

}

}
while (wantToRestart == 'O');
}

}

Pourriez-vous me dire quelle est ma faute et me corriger s'il vous plaît ? Merci d'avance.

mov_eax_1
mov_eax_1
Niveau 10
05 mars 2018 à 20:08:03

c'est parce que la classe Scanner ne prend pas en compte le type primitif char, il faut passer par un string:

String ligne = sc.nextLine();
char wantToRestart = ligne.charAt(0);
Message édité le 05 mars 2018 à 20:12:10 par mov_eax_1
Klimex_x
Klimex_x
Niveau 1
05 mars 2018 à 20:30:04

J'ai apporté les modifications que tu m'as conseillé à mon programme, mais le même message apparaît en ciblant cette fois la ligne "char wantToRestart = ligne.charAt(0);".
Pourrais-tu me donner d'autres conseils pour corriger mon problème s'il te plaît ?

mov_eax_1
mov_eax_1
Niveau 10
05 mars 2018 à 20:34:46

Le 05 mars 2018 à 20:30:04 Klimex_x a écrit :
J'ai apporté les modifications que tu m'as conseillé à mon programme, mais le même message apparaît en ciblant cette fois la ligne "char wantToRestart = ligne.charAt(0);".
Pourrais-tu me donner d'autres conseils pour corriger mon problème s'il te plaît ?

c'est pourtant clair..
l'entrée que tu récupère :
String ligne = sc.nextLine();
et ensuite tu récupère le caractere:
char wantToRestart = ligne.charAt(0);

Message édité le 05 mars 2018 à 20:36:37 par mov_eax_1
Klimex_x
Klimex_x
Niveau 1
05 mars 2018 à 20:46:59

J'ai bien apporté ces modifications mais le programme ne marche toujours pas.
Voici mon programme après modifications :

package fr.monpseudo.monprojet;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numberOfAnswer;
int valueToConvert;
int convertedValue;
char wantToRestart = ' ';
do{
System.out.println("Programme de conversion de degrès Celsius en degrès Farenheit\n");
System.out.println("Voulez-vous : ");
System.out.println("1 : Convertir une température donnée en degrès Celsius en degrès Farenheit.");
System.out.println("2 : Convertir une température donnée en degrès Farenheit en degrès Celsius.\n");
System.out.println("Tapez 1 ou 2 pour effectuer votre choix");
numberOfAnswer = sc.nextInt();

while(numberOfAnswer != 1 && numberOfAnswer != 2) {
System.out.println("Erreur : vous n'avez pas donné un nombre correct. ");
System.out.println("Tapez 1 ou 2 pour choisir votre conversion");
numberOfAnswer = sc.nextInt();
}

System.out.println("Maintenant, veuillez donner la valeur à convertir");
valueToConvert = sc.nextInt();

if(numberOfAnswer == 1) {
convertedValue = (9/5)*valueToConvert+32;
System.out.println(valueToConvert + " degrès Celsius correspondent à " + convertedValue + " degrès Farenheit.");
}
else {
convertedValue = ((valueToConvert-32)*5)/9;
System.out.println(valueToConvert + " degrès Farenheit correspondent à " + convertedValue + "degrès Celsius");
}

do{
System.out.println("Souhaitez-vous convertir une autre température ?(O/N)");
String ligne = sc.nextLine();
wantToRestart = ligne.charAt(0);
}
while(wantToRestart != 'O' && wantToRestart != 'N');

if (wantToRestart == 'O') {
System.out.println("Vous avez choisi de recommencer.");

}

}
while (wantToRestart == 'O');
}

}

Et voici le message d'erreur qui s'affiche après la question "Souhaitez-vous convertir une autre température ?(O/N)" (à laquelle je ne peux pas répondre car la console est bloquée) :

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at fr.monpseudo.monprojet.Main.main(Main.java:42)

mov_eax_1
mov_eax_1
Niveau 10
05 mars 2018 à 21:09:51

revois ton code, c'est pas bien ordonné

Bunyan
Bunyan
Niveau 17
05 mars 2018 à 22:20:01

Peux-tu le mettre sur un site comme pastebin, s'il te plaît ?
Ou à minima utiliser les balises <code>, histoire que ce soit lisible.

Tu tentes de faire un charAt sur une chaîne vide, d'où ton erreur.
Par contre, n'ayant strictement jamais utilisé Scanner (et la, j'ai la flemme), je ne pourrai pas trop te pointer plus, hormis que c'est sans doute un problème dû à la touche entrée inhérent à Scanner.

Deeplearning
Deeplearning
Niveau 10
05 mars 2018 à 22:20:20

Les balises codes, tu es prié de les utiliser [[sticker:p/1kkg]]

Tiens, ça ça marche si tu veux. Mais je te déconseille de faire un do while ici.

String ligne="";

do {
	System.out.println("Souhaitez-vous convertir une autre température ?(O/N)");
	ligne = sc.nextLine();
} while (ligne != "O" && ligne != "N");

wantToRestart=ligne.charAt(0);

Sinon ton programme n'est pas terminé, il fait pas grand chose pour l'instant. Mais bon, ça règle ton problème au moins.
A toi de te creuser la tête

Klimex_x
Klimex_x
Niveau 1
07 mars 2018 à 18:23:48

Merci de toutes vos réponses. J'ai eu la solution sur un autre forum. Il fallait simplement que j'écrive une fois "sc.nextLine();" avant l'instruction qui me posait problème car je n'avais pas demandé le passage à la ligne après la première utilisation du scanner. Je marque donc le topic comme résolu.

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment