【问题标题】:Handling ArrayList out of bounds exception Java处理 ArrayList 越界异常 Java
【发布时间】:2014-12-01 17:53:09
【问题描述】:

我的程序将创建一个二维网格/ArrayList。它将搜索特定框周围的所有框并返回它们的元素。但是,如果框位于边缘,则网格中可能没有任何周围的框。所以我们将尝试访问 arrayList 中的一个空槽,可能是槽 -1。

有没有我可以用Java写一些这样的代码:

ArrayList arr = new ArrayList();

//add 5 elements to arr

for(int i = 0; i<10; i++){

    if(arr.get(i) is out of bounds){

        System.out.println("No elements here");

    else{

        System.out.println(arr.get(i));

    }

【问题讨论】:

  • 首先不能这样声明数组列表,可以循环直到i
  • 避免使用 magic 数字。故事的时期和结局。
  • @SarthakMittal 是的,我觉得没有必要为我的问题声明数据类型。另外,您能阅读我下面的评论吗...有没有更简单的替代方法可以满足我上面的要求?

标签: java arrays exception arraylist exception-handling


【解决方案1】:

您可以检查 i 是否超出数组边界。

如果我 >= arr.size();

虽然更好的解决方案是使用 for each 循环遍历数组的内容,如下所示:

for (Object i : arr){
     // Do something
}

【讨论】:

  • 我明白这一点,但我必须编写很多我希望可以避免的代码。尤其是当我使用 3 维数组时。请记住,我将检查可能小于 i 或大于数组大小的索引处的值,因为它相对于网格中的特定框。
  • 啊,我明白了。通常,当我遇到多维数组的情况时,我会手动检查边界。检查你是否在你的 array.size() 之外应该可以工作,这样你就不必有任何不需要的异常。
  • @JohnDoe:你是什么意思“我必须写很多我希望避免的代码”?这如何为您创建更多代码?您当前的代码很危险。糟糕的代码和 AIOOBE 胜过一切。
  • 是的,我同意@HovercraftFullOfEels 我也不明白你怎么会写很多代码?
  • 对于 2 维我不需要使用条件:如果 i == 0 和 j == 0,如果 i == 0 和 j == size-1,如果 i == size -1 和 j == 0,如果 i == size-1 和 j == size-1
【解决方案2】:

您需要边界控制检查。例如,如果您需要围绕点 x、y 的邻居进行循环,您可以这样做

// assuming that you're checking around point x and y

// here you set minI, maxI
int minI = Math.max(0, x - 1);
int maxI = Math.min(listMax - 1, x + 1);

for (int i = minI; i <= maxI; i++) { 

   // here you set minJ and maxJ
   int minJ = Math.max(0, y - 1);
   int maxJ = Math.min(innerListMax - 1, y + 1); 

   for (int j = minJ; j <= maxJ; j++) {
       // do your stuff here
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 2011-09-27
    • 2018-11-19
    • 2013-03-30
    • 2016-10-25
    相关资源
    最近更新 更多