![](/img/trans.png)
[英]Error after compiling Java project : Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 0
[英]Number input Exception thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 0
在我的程序中,您应该输入分配给变量的距离。 然后,您可以选择一个数字来表示您要进行的转换类型。 例如,如果我选择数字1并按下回车键,它会将我的米转换为千米。
我去做试运行,进入仪表并按下进入。 我无法输入我想要做的转换,因为这里引起了异常:
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)
不确定导致此异常的原因。
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.");
}
我试着看看我是否可以通过搜索找到解决方案,但是大多数人似乎都遇到了索引0处字符的问题,我的输入是一个数字。
meters = keyboard.nextDouble();
是问题,因为它只读取数字而不是整行。 你需要在它之后添加keyboard.nextLine()。 因为稍后的nextLine()调用正在消耗该行的其余部分。
只要像这样制作你的if语句,
if (meters >= 0)
{
meters = keyboard.nextDouble();
keyboard.skip("\n"); //This will skip the '\n' you entered after entering the meters.
}
因为'\\ n'仍然存在于缓冲区中,所以在此之后的keyboard.nextLine()
将会读取它并且您将获得ArrayIndexOutOfBounds
Exception。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.