0

我不明白为什么当我使用下面的代码时会引发以下异常:线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 1 at 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 );

在本节中,当我将 <=9 更改为 <=09 时,它会出现红十字并说: int 类型的文字 09 超出范围。但我认为 int 范围是从 250 万到 0 的任何一种方式。我尝试将 <=9 更改为 <=09.0,这不会给我一个红十字,但在我运行它时仍然会引发相同的运行时错误。有谁知道如何解决这个问题?谢谢

4

5 回答 5

3

String [] tokens = startTime.split(":");在显式使用索引 0 和 1 处的标记之前使用。也就是说,您假设用户输入的任何内容肯定包含至少一个冒号。

拆分输入的字符串后,请确保验证数组的长度,并确保验证每个单独的标记是否代表您想要的值(您正在使用parseDouble- 所以请确保每个标记都包含一个双精度值。最简单的方法将只是用try/catch和 catch包围你的转换NumberFormatException

于 2012-09-18T13:03:24.490 回答
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]);
于 2012-09-18T13:05:12.573 回答
0

问题可能就在这里

double starttimeHours = Double.parseDouble(tokens[0]);
double startMinutes = Double.parseDouble(tokens[1]);

确保您的长度tokens为 2。

于 2012-09-18T13:01:07.330 回答
0
String [] tokens = startTime.split(":");
if(tokens.length>2) {
double starttimeHours = Double.parseDouble(tokens[0]);
double startMinutes = Double.parseDouble(tokens[1]);

标记的长度小于 2时,您的代码会抛出 indexoutofbound

于 2012-09-18T13:05:45.317 回答
0

06是 Java 中的八进制文字,这就是09错误的原因。09.0是双倍的,但由于这不是你得到的原因ArrayIndexOutOfBoundsException,当然你仍然会得到它。请参阅其他答案。

于 2012-09-18T13:23:14.933 回答