【问题标题】:Arrays.fill() - ArrayIndexOutOfBoundsExceptionArrays.fill() - ArrayIndexOutOfBoundsException
【发布时间】:2022-01-20 11:32:11
【问题描述】:

有人可以向我解释为什么我得到 ArrayIndexOutOfBoundsException: Array index out of range??

我有一个简单的数组,例如:{1,2,3,4,5},我想用 0 填充从 0 到最后一个索引之前的索引:更新后的数组应该像 {0,0, 0,0,5}。

我试试看:

 public static int[] makeLast(int[] nums) {

    int size = nums.length;
    Arrays.fill(nums, nums[0], nums[size-2] ,0);
    return nums;
}

不幸的是,它导致我出现上述错误。

【问题讨论】:

  • 想知道:您对得到的答案还有疑问吗?如果没有,并且您的问题已解决,请考虑在某个时候接受其中一个答案。

标签: java arrays


【解决方案1】:

读取对应的java doc:第三个参数是最后一个要填充的索引。 因此,该方法从第一个给定的 index “填充”到那个 index -1

所以你必须传递你关心的索引而不是那些索引的当前内容!

Arrays.fill(nums, 0, size-1 ,0);

请注意,异常消息会告诉您您尝试访问无效索引。所以真正的答案是:仔细阅读异常消息,并且:更仔细地阅读您正在使用的库调用的 javadoc。

【讨论】:

  • @GhostCat 注意Arrays.fill(..) 第一个索引是包容性的,而第二个索引是独占性的。我想你希望第二个索引是size-1。 OP 应该考虑他们是否需要处理数组为空/空的情况。
【解决方案2】:

ArrayIndexOutOfBoundsException是在数组中没有找到开发者调用索引时发生的,所以我检查了数组的大小 并且 Marco 需要将数组的所有值设置为零,除了最后一个。 方法填充是这样的 => Arrays.fill(ARRAY,FIREST_INDEX, LAST_IDNEX,VALUE) ;

 public static int[] makeLast(int[] nums) {
        int size = nums.length;
        if (size != 0) {
            Arrays.fill(nums, 0, size - 1, 0);
        }
        return nums;
    }

【讨论】:

  • {1,2,3,4,5} 数组的输出将是 0,0,0,0,5
  • 如果您解释了您的代码解决问题的原因,这将是一个更好的答案。
【解决方案3】:

首先,它不能作为子字符串来排除最后一个索引。它从给定的第一个索引填充到给定的第二个索引 - 包括。

其次,如果您的输入数组为空、空或仅包含一个条目,您的方法也会失败。

你传递的是内容而不是实际的索引——所以完全错误地使用了填充方法。

if (nums == null) return null;
int size = nums.length;
if (size > 1)
  Arrays.fill(nums, 0, size-1, 0);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2011-12-03
    • 2019-06-19
    • 2014-05-19
    • 2013-02-25
    相关资源
    最近更新 更多