Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 0
Je veux créer un petit programme en mode console qui convertir de Celsius - Fahrenheit et vice versa, c'est le code que j'ai essayé:
import java.util.Scanner;
public class CelsiusFahrenheit {
private static Scanner s;
public static void main(String[] args) {
s = new Scanner(System.in);
char reponse = 'N', choixConvert;
do
{
do
{
System.out.println("Choisie le mode de converstion : ");
System.out.println("1 - Converstisseur Celesuis - Fahrenheit");
System.out.println("2 - Converstisseur Fahrenheit - Celesuis");
do
{
System.out.print("Votre Choix: ");
choixConvert = s.next().charAt(0);
if(choixConvert != '1' && choixConvert != '2')
System.out.println("Mode inconnu, veuillez réitérer votre choix.");
}
while(choixConvert!='1' && choixConvert!='2');
System.out.print("Température à convertir : ");
double temp = s.nextDouble();
System.out.print("Resultat est: " + ConvertCelesuisFahrenheit(choixConvert,temp));
System.out.println("\nSouhaitez-vous convertir une autre température ? (O/N)");
reponse = Character.toUpperCase(s.nextLine().charAt(0));
}while(reponse != 'O' && reponse != 'N');
}while(reponse == 'O');
System.out.println("Au revoir !");
}
private static Double ConvertCelesuisFahrenheit(int choixConvert,double temp )
{
if(choixConvert == 1)
return (9/5)*temp+32;
else
return (temp-32)*(5/9);
}
}
mais j'ai eu un problème que la fonction ConvertCelesuisFahrenheit() retourne toujours 0.0 et d'après ce qu'il me donne cette erreur:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: 0 à java.lang.Chaîne de caractères.charAt(Inconnu
Source) à CelsiusFahrenheit.principale(CelsiusFahrenheit.java:33)
C'est la sortie:
Choisie le mode de converstion :
1 - Converstisseur Celesuis - Fahrenheit
2 - Converstisseur Fahrenheit - Celesuis
Votre Choix: 2
Température à convertir : 33
Resultat est: 0.0
Souhaitez-vous convertir une autre température ? (O/N)
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at CelsiusFahrenheit.main(CelsiusFahrenheit.java:33)
- Je pense que ce serait beaucoup plus facile de répondre à votre question si ça n'était pas... bordélique. Vous avez donc de nombreuses, tandis que les boucles, honnêtement, tu pourrais probablement le faire dans une boucle. Si vous pouviez juste nous montrer la ligne 33, que ce serait mieux.
- c'est la ligne 33:
reponse = Character.toUpperCase(s.nextLine().charAt(0));
Vous devez vous connecter pour publier un commentaire.
nextDouble()
quitte le retour à la ligne dans le flux d'entrée, de sorte que lorsque vous appelezle résultat de
nextLine()
est une chaîne vide. Supprimer le saut de ligne à partir du flux, ou l'utilisationnext()
, comme vous l'avez fait ci-dessus.Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0 at java.lang.String.charAt(Unknown Source) at CelsiusFahrenheit.main(CelsiusFahrenheit.java:31)
La ligne 31 :s.nextLine().charAt(0);
double temp = s.nextDouble(); s.nextLine().charAt(0);
next()
au lieu denextLine()
là pour s'assurer que vous n'obtenez pas une ligne vide.s.nextLine();
pars.next();
Il y a plusieurs problèmes ici ..
nextLine().charAt(0)
obtient la chaîne vide parce que la nouvelle ligne n'est pas consommé par nextDouble()Vous pouvez résoudre ce problème en ajoutant simplement un
En outre, les maths dans votre calcul de conversion est incorrect. Utilisation
5.0/9.0
au lieu de5/9
.Enfin, vous êtes la lecture de la
choixConvert
caractèrechar
, mais ensuite le passant comme unint
dans votre méthode, de sorte que leelse
bloc sera toujours exécuté.Mise à jour de cette:
reponse = Character.toUpperCase(s.nextLine().charAt(0));
avecnext
lit la chaîne suivante tout ennextList
lit l'ensemble de la ligne. Je suis plein d'espoir, vous pouvez vous fixer programme à l'aide de nextLine ainsi.