简体   繁体   中英

Number input Exception thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 0

In my program you're supposed to enter the distance which is assigned to a variable. You then select a number that signifies what type of conversion you want to make. For example, if I selected the number 1 and pressed enter, it would convert my meters to kilometers.

I went to do a test run, entered the meters in and pressed enter. I was unable to enter what conversion I wanted to do as an exception was caused like here:

Please enter the distance in meters: 500
Please enter the number of the conversion you want to make: 
1. Convert to Kilometers 
2. Convert to Inches 
3. Convert to Feet 
4. Quit ProgramException in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:658)
at ConversionWilson.main(ConversionWilson.java:41)

Not sure what is causing this exception.

public static void main (String [] args)
{

// Scanner object to read input
Scanner keyboard = new Scanner (System.in);
// Prompt the user for distance and conversion.
System.out.println("Welcome to the Conversion Program.");
System.out.println("With this program, you can enter a distance and convert it to another form of measurement.");
System.out.print("Please enter the distance in meters: ");

if (meters >= 0)
{
   meters = keyboard.nextDouble();
}
else
{
   System.out.println("Meters cannot be a negative number. Please choose a positive number.");
}

System.out.print("Please enter the number of the conversion you want to make: \n" +
                 "1. Convert to Kilometers \n" + "2. Convert to Inches \n" + "3. Convert to Feet \n" +
                 "4. Quit Program");
input = keyboard.nextLine();
conversion = input.charAt(0);

// Deciding what conversion method to call.

switch (conversion)
{
  case '1':
     showKilometers(meters);
     break;

  case '2':
     showInches(meters);
     break;

  case '3':
     showFeet(meters);
     break;

  case '4':
     System.out.println("Beep boop bop. Quitting the program now. Later.");
     break;

  default:
     System.out.println("You did not select a possible choice. Please run the program again and be sure to choose a correct number.");
}         

I tried seeing if I could find a resolve via a search, but most of them seem to have an issue with the character at index 0 being a letter, where my input is a number.

meters = keyboard.nextDouble(); is the issue as it only reads the number and not the entire line. You need to add keyboard.nextLine() after it. As the nextLine() call later is consuming the rest of the line.

Just make your if statement like this,

        if (meters >= 0)
        {
           meters = keyboard.nextDouble();
           keyboard.skip("\n"); //This will skip the '\n' you entered after entering the meters.
        }

Because of '\\n' is still there in the buffer the keyboard.nextLine() after that is going to read that and you are getting ArrayIndexOutOfBounds Exception.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM