2017-04-20 14 views
-2

過去数日を取得するArrayIndexOutOfBoundsException。このタイプの質問はすでに#SOで尋ねられています。私は試した 。ArrayIndexOutOfBoundsExceptionを取得する例外

java.lang.ArrayIndexOutOfBoundsException:length = 1;インデックス= 1

コード

String[] Child_DOB = "KUSHAGRA (SON)-07/05/94AANVI (DAUGHTER)-12/06/00 VARENYA (SON) - 26/12/05"; 
     ArrayList<String> children_List = new ArrayList<String>(); 
     ArrayList<Integer> Length_List = new ArrayList<Integer>(); 
     String Children_Details_str = ""; 

     int i = 0; 
     while (i < Child_DOB.length) { 
      String name_dob = Child_DOB[i] + " " + Child_DOB[i + 1];//this line 
      if (i > 3) 
       Children_Details_str = Children_Details_str + "\n" + name_dob; 
      else 
       Children_Details_str = Children_Details_str + name_dob + " "; 
      children_List.add(name_dob); 
      Length_List.add(Child_DOB[i].length()); 
      Length_List.add(Child_DOB[i + 1].length()); 
      i = i + 2; 
     } 

は、私は私の目的を達成するための正しい方法は何か知っているかもしれませんか?

String name_dob = Child_DOB[i] + " " + Child_DOB[i + 1];//this line 

はあなたChild_DOB配列に一つだけの要素があると、あなたはwhileループを入力し、i = 0にしようとする:任意のヘルプは大幅に

+0

あなたが達成しようとしているかを理解するのは難しい状況 –

+0

場合は、使用して確認することができますアクセスする前に。しかし、あなたは次のようにチェックすることができます: 'while((i + 1) Marat

+0

String [] Child_DOB:互換性のない型です。文字列を分割してString []を作成します。 – Janak

答えて

2

をいただければ幸いあなたが指摘したようにこれはラインでありますアクセスi+1、つまり1番目の要素。配列は0番目のインデックスから始まり、インデックス1の要素にアクセスするとArrayIndexOutOfBoundsExceptionがスローされます。これを回避するには、

while (i < Child_DOB.length - 1) {//go until second last element 

があります。これは、配列に偶数の要素がある場合に機能します。あなたが奇数の要素を持っているなら、あなたは最後の名前逃す

あなたが本当に最後の要素を欠場したくない場合は、あなたができる何かのように(あなたのロジックあたりとして問題ないはずです。):

if ((Child_DOB.length & 0X1) == 1) { 
    Length_List.add(Child_DOB[Child_DOB.length - 1].length()); 
    //append to Children_Details_str.. better use StringBuilder here 
} 
+0

私はこれを試してみます。 – Kankana

1

CHILD_DOBには1つの文字列しかありません。 while文では、Child_DOB[i + 1]と入力しました。 CHILD_DOB[1]にアクセスするが、 が、私はあなたのコードを修正するだろうと思う。この

String[] Child_DOB = new String[] {"KUSHAGRA", 
"(SON)-07/05/94AANVI", "(DAUGHTER)-12/06/00", "VARENYA", "(SON)", "-", "26/12/05"}; 

を試してみてくださいCHILD_DOB[0]あるCHILD_DOBで唯一の項目がある 。

2
あなた whileループ conditionように変更し

while (i < Child_DOB.length - 1) 

説明:たとえば

を、Child_DOB.length5i値は、あなたのコードでは、4です:

ここ
int i = 4; 
    while (i < 5) { 
     String name_dob = Child_DOB[4] + " " + Child_DOB[4 + 1]; 

配列indexが0から始まり、Child_DOBのインデックスが[0 1 2 3 4]であるため、はArrayIndexOutOfBoundsExceptionになります。

希望これは〜

+0

@voidあなたの問題の現在の状態は何ですか?解決するために私の答えを試してください.. – FAT

1

あなたはChild_DOBのでChild_DOB.length = 1で唯一の要素を持っている、とあなたは第二の要素にアクセスしようとしているwhileループ内Child_DOB [I + 1]を助けます最初の反復自体で...だからあなたは例外を取得しています... あなたは正確にどの出力を教えていただけますか?

1

Use-

while (i < Child_DOB.length - 1) 

の代わりに -

while (i < Child_DOB.length) 
関連する問題