【问题标题】:Why index greater than for loop condition leads to exception [Java]?为什么索引大于for循环条件会导致异常[Java]?
【发布时间】:2016-06-22 14:08:18
【问题描述】:

我正在两个数组中搜索匹配的元素。如果找到匹配元素,我将kj 设置为大于for 循环条件以退出循环,但在内部循环条件下出现异常。当然,我可以通过使用break outerloop; 来修复它,但是设置索引不是大于应该退出循环的for 循环条件吗?

//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
                }

             } 
         }
    }

【问题讨论】:

  • 为什么不会导致异常?您无法访问不存在的内容
  • 安德鲁,您的评论对学习 Java 的人没有真正的帮助。
  • @sixtytrees 为什么不是呢?我告诉他为什么会抛出异常
  • @Andrew。您有效地说“肯定它会抛出异常,因为它必须抛出它。我明白原因,但你,失败者,不要。这是你的反对票”。这就是你所做的。非常热情好客,干得好。
  • 如果您遇到异常,请查看该异常的 javadoc(例如 IndexOutOfBoundsException)和引发异常的方法调用(例如 List.get(int)),以了解为什么该异常可能被扔掉。

标签: java for-loop


【解决方案1】:

首先,您能发布您的堆栈跟踪吗?

其次,你的异常很可能是由j = listOfSubcategories.size();引起的,这使得比较k &lt; 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);
    }    
}

【讨论】:

  • 您应该在评论中询问更多信息,而不是作为回答的一部分。
  • @Andy Turne。我的错。
猜你喜欢
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多