我不明白为什么当我使用下面的代码时抛出以下异常:线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:1 在java4.main(java4.java:11)
import java.util.Scanner;
public class java4{
public static void main (String[] args) {
Scanner console = new Scanner(System.in);
System.out.println("Enter start time");
String startTime = console.nextLine();
String [] tokens = startTime.split(":");
double starttimeHours = Double.parseDouble(tokens[0]);
double startMinutes = Double.parseDouble(tokens[1]);
if (starttimeHours >=6 && starttimeHours <=9 );
int wage = 2;
System.out.println("Enter estimated hours work:");
String esthourswork = console.nextLine();
double wagedoubleNumber = Double.parseDouble(esthourswork);
if (starttimeHours >=06.0 && starttimeHours <=09.0 );
double totalPay = 2 * wage;
double totalPay1 = (Math.round(totalPay *100))/100.0;
System.out.println("Total fare:$ " + totalPay1);
}}
因为我认为这是代码的这一部分:
if (starttimeHours >=06 && starttimeHours <=9 );
当我将&lt; = 9更改为&lt; = 09时,使用此部分,它会出现红十字并说: int类型的文字09超出范围。但我认为int范围是从250万到0的任何一种方式..我尝试将&lt; = 9更改为&lt; = 09.0但它没有给我一个红色交叉,但在运行它时仍然会抛出相同的运行时错误。有谁知道如何解决这个问题?感谢
答案 0 :(得分:3)
在明确使用索引0和1处的标记之前,您正在使用String [] tokens = startTime.split(":");
。也就是说,您假设用户输入的内容肯定包含至少一个冒号。
分割输入的字符串后,请确保验证数组的长度,并确保验证每个单独的标记代表您想要的值(您使用parseDouble
- 所以请确保每个标记包含双精度值。最简单的方法是使用try/catch
围绕转换并捕捉NumberFormatException
。
答案 1 :(得分:0)
问题可能就在这里
double starttimeHours = Double.parseDouble(tokens[0]);
double startMinutes = Double.parseDouble(tokens[1]);
确保tokens
的长度为2。
答案 2 :(得分:0)
您需要在:
中startTime
转义startTime.split("\\:");
,如// error may lie here, you will get exception when user enters string which does not contain :
String [] tokens = startTime.split(":");
double starttimeHours = Double.parseDouble(tokens[0]);
// exception is thrwon from following line as tokens[] contain only one element
double startMinutes = Double.parseDouble(tokens[1]);
{{1}}
答案 3 :(得分:0)
String [] tokens = startTime.split(":");
if(tokens.length>2) {
double starttimeHours = Double.parseDouble(tokens[0]);
double startMinutes = Double.parseDouble(tokens[1]);
当代码的长度小于2
时, 抛出indexoutofbound 。答案 4 :(得分:0)
06
是Java中的octal literal,这就是错误中09
的原因。 09.0
是双倍的,但由于这不是你获得ArrayIndexOutOfBoundsException
的原因,当然你仍然会得到它。请参阅其他答案。