条件语句超出范围错误

时间:2012-09-18 13:00:01

标签: java

我不明白为什么当我使用下面的代码时抛出以下异常:线程“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但它没有给我一个红色交叉,但在运行它时仍然会抛出相同的运行时错误。有谁知道如何解决这个问题?感谢

5 个答案:

答案 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的原因,当然你仍然会得到它。请参阅其他答案。