Uitzondering in thread “main” java.lang.StringIndexOutOfBoundsException: Stringindex buiten bereik: 0

Ik wil een klein consoleprogramma maken dat converteert van Celsius naar Fahrenheit en vice versa, dit is de code die ik heb geprobeerd:

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);
    }
}

maar ik had een probleem dat de functie ConvertCelesuisFahrenheit() altijd 0.0 retourneert en daarna geeft het me deze fout:

Uitzondering in thread “main” java.lang.StringIndexOutOfBoundsException:
Stringindex buiten bereik: 0 op java.lang.String.charAt(Unknown
Bron) op CelsiusFahrenheit.main(CelsiusFahrenheit.java:33)

Dit is de uitvoer:

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)

Antwoord 1, autoriteit 100%

nextDouble()laat de nieuwe regel in de invoerstroom staan, dus als je dan aanroept

nextLine().charAt(0)

het resultaat van nextLine()is een lege string. Verwijder de nieuwe regel uit de stream, of gebruik next(), zoals je hierboven hebt gedaan.


Antwoord 2, autoriteit 33%

Er zijn hier verschillende problemen ..

nextLine().charAt(0)krijgt de lege string omdat de nieuwe regel niet wordt gebruikt door nextDouble()

Je kunt dit oplossen door simpelweg een

. toe te voegen

String continueString = s.next();
response = Character.toUpperCase(continueString.charAt(0));

Bovendien is de berekening in uw conversieberekening onjuist. Gebruik 5.0/9.0in plaats van 5/9.

Ten slotte lees je het choixConvert-teken als een char, maar geef je het vervolgens door als een intin je methode, dus de elseblok wordt altijd uitgevoerd.


Antwoord 3, autoriteit 17%

Werk dit bij: reponse = Character.toUpperCase(s.nextLine().charAt(0));met

         String line = s.nextLine();
          while(line.length() <1){
             line = s.nextLine();
          }
          reponse = Character.toUpperCase(line.charAt(0));

Other episodes