【问题标题】:Exception in ArrayList in javajava中的ArrayList中的异常
【发布时间】:2020-05-23 05:02:00
【问题描述】:
public static int getMin(int[] arr, int min,int max,int a){
    Integer[] test = Arrays.stream(arr).boxed().toArray(Integer[]::new);
    List<Integer> list =null;
    list = new ArrayList(Arrays.asList(test));
    list.removeAll(Collections.singleton(0));
    min = Collections.min(list);
    max = Collections.max(list);

    if(a == 0) {
        return min;
    } else {
        return max;
    }
}

列表项

Exception in thread "main" java.util.NoSuchElementException
    at java.util.ArrayList$Itr.next(ArrayList.java:862)
    at java.util.Collections.min(Collections.java:596)
    at Solution.getMin(Solution.java:47)

这个异常的原因是什么?

【问题讨论】:

  • 您的列表有多少个非0 元素?
  • 它取决于输入,对于那个问题,输入是在运行时给出的
  • 附带说明,这是一种从数组中获取最小值或最大值的非常低效的方法。您的第一行确实已经包含一个 Stream 操作,所以为什么不让 Stream 首先返回预期的结果:IntStream is = Arrays.stream(arr).filter(i -&gt; i != 0); OptionalInt result = a == 0? is.min(): is.max(); 然后,您必须决定如果结果为空该怎么办,例如return result.orElse(0);

标签: java arraylist collections


【解决方案1】:

空集合

Collections.min 的 Javadoc 指出,传递一个空集合将抛出一个 NoSuchElementException

在检查最小值和最大值之前添加对List::isEmpty 的测试。

【讨论】:

    【解决方案2】:

    您传递了一个仅包含零的数组。这行代码删除了所有零元素list.removeAll(Collections.singleton(0));。在此之后,列表的大小为零——其中没有任何元素。


    这里是一个重现异常的例子

    private static void getMin() {
        List<Integer> list = new ArrayList<>();
    
        Collections.min(list);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-24
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 2013-06-22
      相关资源
      最近更新 更多