2012-09-18 3 views
0

아래 코드를 사용할 때 다음 예외가 throw되는 이유를 이해할 수 없습니다. "main"스레드의 예외 java.lang.ArrayIndexOutOfBoundsException :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의 아이폰에 당신은 명시 적으로 인덱스 0이고 1에서 토큰을 사용하기 전에 String [] tokens = startTime.split(":");를 사용하는 2

+0

그렇습니다. Alex가 말했듯이 맞습니다. 사용자가 두 개의 토큰을 입력하도록해야합니다. 두 개의 토큰 사이에 aoind 오류가 있습니다. 고맙습니다. – user1319219

+0

@ user1319219 글쎄, 내 대답은 너무 생산적이 아니기 때문에 (나는 시간이별로 없기 때문에) 알렉스처럼 대답했다. 알렉스의 대답을 수락하자마자이 답변을 삭제하겠습니다. :) –

3

있는지 확인 아마 여기에, 당신은 가정입니다 사용자가 입력 한 내용에 콜론이 하나 이상 포함되어 있어야합니다.

입력 한 문자열을 분리 한 후 배열의 길이를 확인하고 각 개별 토큰이 원하는 값을 나타내는지 확인하십시오 (parseDouble을 사용하고 있으므로 각 토큰에 두 개의 숫자가 포함되어 있는지 확인하십시오 값. 가장 쉬운 방법은 바로 try/catch로 전환을 둘러싸고 NumberFormatException을 잡을 것입니다.

0

을 당신은 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]); 
0
String [] tokens = startTime.split(":"); 
if(tokens.length>2) { 
double starttimeHours = Double.parseDouble(tokens[0]); 
double startMinutes = Double.parseDouble(tokens[1]); 
같이 startTime:을 탈출해야합니다

토큰 길이가 2보다 작 으면 코드가이됩니다.

0

06은 Java에서 octal literal이며, 이유는 09입니다. 09.0은 두 배이지만, 이것이 당신이 ArrayIndexOutOfBoundsException을 얻은 이유가 아니기 때문에, 당신은 여전히 ​​그것을 얻을 것입니다. 그것에 대한 다른 답변을보십시오.

관련 문제