2016-06-22 7 views
0

私は2つの配列で一致する要素を探しています。一致する要素が見つかった場合は、kjforループ条件より大きく設定してサイクルを終了しますが、内部ループ条件で例外が発生します。確かに、break outerloop;を使用して修正できますが、ループを終了するループ条件であるforよりも大きいインデックスを設定していませんか?forループの条件を超えるインデックスが例外[Java]につながるのはなぜですか?

//outerloop: 
for (int j = 0; j < listOfSubcategories.size(); j++) { 
    if (listOfSubcategories.get(j).subcatName.equals(rawOptions.get(i).subcatName)) { //if the subcatName exists 

     for (int k = 0; k < listOfSubcategories.get(j).listOfID.size(); k++) { 

      if (0 == rawOptions.get(i).codeID.compareTo(listOfSubcategories.get(j).listOfID.get(k).codeID)) {//if this id (as in 0090-01 exists 
        listOfSubcategories.get(j).listOfID.get(k).usageCount += rawOptions.get(i).usageCount; 
        isProcessed = true; 
        k=listOfSubcategories.get(j).listOfID.size(); //this fails 
        j = listOfSubcategories.size(); 
        //break outerloop;      //this works 
       } 

      } 
     } 
    } 
+0

なぜ*例外は発生しませんか? – Li357

+0

Andrew、あなたのコメントは、Javaを学ぶ人には本当に役に立たない。 – sixtytrees

+0

@sixtytreesなぜそれがありますか?私はなぜ例外がスローされるのか、彼に言った – Li357

答えて

1

まず、スタックトレースを投稿してください。

第2に、あなたの例外はおそらくj = listOfSubcategories.size();によって引き起こされます。これにより、比較k < listOfSubcategories.get(j).listOfID.size()は不可能になります。

以下のコードは機能します。

public class ForArray { 

    public static void main(String[] args) { 


     int[] myIntArray = {1, 2, 3}; //This is my Array 
     int searchingForThisNumberInArray = 2; //Search for this number in an array 
     int index=-1; //Index of the first matching element. -1 if element not found. 

     for (int i = 0; i < myIntArray.length; i++) { //Check each element 
      if (myIntArray[i] == searchingForThisNumberInArray) { //if this element contains correct number 
       index = i; //Save it in index 
       i = myIntArray.length; //Quit for cycle by increasing i. 
      } 
     } 
     System.out.println(index); 
    }  
} 
+1

コメントには、回答の一部としてではなく、追加情報を求めてください。 @Andy Turne。 –

+0

私の悪い。 – sixtytrees

関連する問題