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

インデックス 0 と 1 でトークンを明示的に使用String [] tokens = startTime.split(":");する前に使用しています。つまり、ユーザーが入力したものには必ず少なくとも 1 つのコロンが含まれていると想定しています。

入力した文字列を分割した後、配列の長さを確認し、個々のトークンが目的の値を表していることを確認してください (使用している場合parseDouble、各トークンに double 値が含まれていることを確認してください。最も簡単な方法は、変換をtry/catchand catchで囲むだけNumberFormatExceptionです。

于 2012-09-18T13:03:24.490 に答える
0

問題はおそらくここにあります

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

あなたの長tokensさが2であることを確認してください。

于 2012-09-18T13:01:07.330 に答える
0

06Java では 8 進数のリテラルであるため、エラー09が発生します。09.0は double ですが、それが を取得する理由ではないためArrayIndexOutOfBoundsException、もちろん取得できます。それについては、他の回答を参照してください。

于 2012-09-18T13:23:14.933 に答える
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]);
于 2012-09-18T13:05:12.573 に答える
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 に答える