2012-09-18 54 views
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这不会给我一个红十字,但仍然会抛出相同的运行时错误,当我运行它。有谁知道如何解决这个问题?感谢

回答

0

问题很可能是这里

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

确保您tokens的lenght为2

+0

是的,这是正确的,就像Alex说的那样。我需要让用户在他们之间输入2个令牌,以避免错误。谢谢。 – user1319219

+0

@ user1319219好吧,我的答案并不像Alex那样富有成效(因为我没有太多时间)。我会尽快删除这个答案,你会接受亚历克斯的回答:) –

3

的指数在0和1这是明确使用令牌之前,您正在使用String [] tokens = startTime.split(":");,你是假设无论用户输入什么,都至少包含一个冒号。

分割输入的字符串后,请确保验证数组的长度,并确保验证每个单独的令牌都代表您想要的值(您正在使用parseDouble - 因此请确保每个令牌都包含双精度型值,最简单的方法是只围绕您的转换与try/catch,赶上NumberFormatException

0

你需要逃避:startTimestartTime.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]); 
0
String [] tokens = startTime.split(":"); 
if(tokens.length>2) { 
double starttimeHours = Double.parseDouble(tokens[0]); 
double startMinutes = Double.parseDouble(tokens[1]); 

你的代码会扔indexoutofbound令牌的长度小于2

0

06是Java中的octal literal,这就是为什么09发生错误。 09.0是双倍的,但因为这不是你得到ArrayIndexOutOfBoundsException的原因,当然你仍然可以得到它。请参阅其他答案。