You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java类伪代码数组append方法bug排查 正确修复选项选择

问题分析与答案

首先澄清你对代码的两个疑问:

  1. 扩容触发的if条件if (size == maxsize)逻辑是合理的:size代表当前已存入数组的元素个数,maxsize是数组的总容量,元素存满时才触发扩容是常规的动态数组设计,这块没有问题。
  2. 你怀疑循环条件有问题是对的,这也是这段代码唯一的bug:
    进入扩容分支时,size已经等于maxsize,原数组的有效下标范围是0 ~ size-1(因为数组从0开始计数),原有代码的循环条件i <= size会让循环最后一次执行到i=size,尝试读取arr[size],这已经超出了原数组的下标范围,会触发数组越界异常。

接下来逐个排除错误选项:

  • 第1行修改为private int size = 16;:初始状态数组是空的,没有任何元素,size初始值为0才符合逻辑,修改后第一次调用append就会无意义触发扩容,完全错误。
  • 第7行修改为if (size > maxsize):size的最大值最多等于maxsize,永远不可能大于maxsize,修改后扩容逻辑永远不会触发,存入第17个元素时会直接越界,错误。
  • 第13行代码移至第10行之前执行:提前修改maxsize的值完全解决不了循环读取越界的问题,原有循环还是会读到超出原数组范围的下标,错误。
  • 第15行修改为arr[++size] = val;:会导致第一个元素直接存入数组下标1的位置,下标0永久空置,且存入第16个元素时还没触发扩容就会直接越界,错误。
  • 第10行修改为for (i = 0 ; i < maxsize ; i++):这里选项大概率存在符号输入误差,正确的循环逻辑就是只遍历原数组的有效下标,终止条件设为i < maxsize刚好可以避免越界,是唯一正确的修复方案。

内容的提问来源于stack exchange,提问作者compsci9298233

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:36:05