gpt4 book ai didi

java - 即使将新数组长度设置为旧数组长度,也会出现 ArrayIndexOutOfBoundsException

转载 作者:行者123 更新时间:2023-12-02 01:05:28 26 4
gpt4 key购买 nike

这是 CodingBat.com“frontPiece”上的问题。正如对问题的解释,返回应该是原始数组的前两个元素的数组。那没问题。但是,有一些边缘情况是空数组和只有一个元素的数组。这是我遇到一些错误的地方。

执行此操作的简单方法是为每个边缘情况使用 IF 语句。这对我来说似乎很容易,我做这些练习的原因之一是学习新工具,例如增强的 FOR 循环。

  if(nums.length < 2){
int[] answer = new int[nums.length];
for(int x: nums){
answer[x] = nums[x];
}
return answer;
}else{
int[] answer = new int[2];
answer[0] = nums[0];
answer[1] = nums[1];
return answer;
}
} ```

大多数输入数组都会无法通过 IF 语句,从而导致代码的 ELSE 部分中的新数组的声明和填充。空数组会导致创建并返回空数组,也会传递。该错误伴随着大小为 1 的数组。

我对增强型 FOR 或 FOR EACH 循环的理解(可能不充分)是它逐步遍历数组,为其中的每个元素执行下面的代码块。我本以为将 ANSWER 数组的长度设置为原始 NUMS 数组的长度可以防止出现 OOB 错误。

感谢任何帮助。提前致谢。

最佳答案

在这个循环中

for(int x: nums)

您不是在 nums 数组的索引上迭代,而是在上迭代,因此如果值大于nums.length 你超出了数组边界

例如:

int nums[] = new int[]{1000};

但是,在 for-each 循环的第一次迭代中,nums.length1,您将尝试访问 answer[1000] 并且nums[1000]

<小时/>

对于此类复制,您应该使用for(;;)版本的循环或什至更好的Arrays.copyOf()方法

关于java - 即使将新数组长度设置为旧数组长度,也会出现 ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57736859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com