当要删除数组指定位置的元素e时 可以使用如下方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Array<E> {private int size;//数组中有效数据的长度。初始值为0 。private E[] data;//存放数据的数组。//无参构造函数,数组默认长度为10。public Array() {data = (E[])new Object[10];}//构造函数,创建用户定义长度的数组。public Array(int capacity){data = (E[]) new Object[capacity];}
}//删除指定索引的元素,数组默认长度为10public E remove(int index){if (index < 0|| index >= size)throw new IllegalArgumentException("Remove failed , Index is illegal");E e = data[index];for (int i = index ; i < size; i++) {data[i] = data[i + 1];}size --;return e;}

主方法使用代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Test {public static void main(String[] args) {Array<Integer> array = new Array<>();for (int i = 0; i < 10; i++) {array.addLast(i);}System.out.println(array);array.remove(9);System.out.println(array);}
}
运行结果:
Array: size = 10 , capacity = 10  [0,1,2,3,4,5,6,7,8,9]  //重写了toString方法。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 10

产生异常原因:
当 i = size - 1 时 i+1 = size(此时size = data.length) data[size]会产生数组索引越界异常。

1
2
3
for (int i = index; i < size; i++) {data[i] = data[i+1];}

解决办法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (int i = index; i < size; i++) {data[i] = data[i+1];}改为:for (int i = index + 1; i < size; i++) {data[i - 1] = data[i];}或:for (int i = index; i < size - 1; i++) {data[i] = data[i+1];}

好处:
避免了数组索引越界异常(使i永远要小于size)
减少一次循环次数

谢谢你请我吃糖果

支付宝
微信

数组遍历产生的索引越界问题相关推荐

  1. 基础第一阶段day05——索引越界异常、空指针异常

    ArrayIndexOutOfBoundsException 数组越界异常 public class Test01 {public static void main(String[] args) {i ...

  2. 常见问题_数组索引越界异常

    package com.learn.day05.demo03;/* 数组的索引编号从0开始,一直到"数组的长度-1"为止.如果访问数组元素的时候,索引编号并不存在,那么将会发生 数 ...

  3. 数组索引越界异常 ArrayIndexOutOfBoundsException

    如果访问数组元素的时候,索引编号并不存在,那么将会发生 数组索引越界异常 ArrayIndexOutOfBoundsException 原因:索引编号写错了. 解决:修改成为存在的正确索引编号. 所有 ...

  4. Swift数组遍历和索引

    Swift数组遍历和索引 数组遍历 索引 数组遍历 Swift最常见的就是For-In 除此之外还有forEach方法,我们先来介绍一下forEach,但是forEach方法有些缺点 1.无法使用br ...

  5. java数组索引越界异常如何解决_java之ArrayIndexOutOfBoundsException数组越界与IndexOutOfBoundsException索引越界之间关系...

    ArrayIndexOutOfBoundsException与IndexOutOfBoundsException之间的关系是继承关系,看源代码就可以知道: public class ArrayInde ...

  6. Golang——数组遍历、最大值、求和、多维数组

    数组: 数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致. 数组定义完成后,可以对数组进行赋值操作.数组是通过下标来进行操作的,下标的范围是从0开始到数组长度减1的位置. 特点: 数组是一 ...

  7. 初识java中数组、数组在内存中、越界异常、空指针异常

    数组: 当存储多个数据时,此时可能会使用多个变量,这样不断声明变量会很麻烦,而这些变量都有相似的特性,因此我们可以将它们存放到一个容器中,统一处理. 容器:是将多个数据存储到一起,每个数据称为该容器的 ...

  8. php利用数组循环输出,php数组遍历,php循环输出数组

    php数组遍历,php循环输出数组,PHP数组循环遍历的四种方式 [(重点)数组循环遍历的四种方式] 1,https://www.cnblogs.com/waj6511988/p/6927208.ht ...

  9. java二维数组遍历后转为一维数组_[基础篇]-基础知识整理-05-数组基本概念

    数组 数组是大部分编程语言所支持的数据结构,Java也支持数组,Java的数组是一种引用类型的变量,Java程序通过数组引用变量来操作数组,包括获取数组的长度,访问数组的值等. 数组的基本概念 数组是 ...

最新文章

  1. Kali Linux安装VMware Tools
  2. FD.io/VPP — 常用指令集合
  3. shell date 获取昨天日期
  4. 深入理解JVM虚拟机(三):虚拟机性能监控工具
  5. 搭建流媒体服务器(1)
  6. 成功解决 raise XGBoostError(_LIB.XGBGetLastError()) xgboost.core.DMatrix/Booster has not been intialized
  7. jquery之仿京东菜单
  8. finally块的问题(finally block does not complete normally) (转)
  9. php --魔术常量 /魔术方法
  10. pdo mysql下载,yum安装mysql5.7 和 pdo_mysql扩展
  11. 最新 MySQL数据库安装详解(简洁快速)
  12. vue自定义下拉菜单,点击下拉其它空白区域,下拉消失
  13. java基础杂谈(一)
  14. Hyperledger Fabric教程(9)-- peer命令-通道channel
  15. linux strace 命令参数
  16. Java在线反编译器
  17. 阿拉丁指数丨《2021 年度小程序互联网发展白皮书》4.5 亿+DAU 小程序的 6 大发展趋势
  18. 微型计算机系统结构中的总线,微型计算机的总线结构
  19. windows应用(vc++2022)MFC基础到实战(1)-基础(1)
  20. HMDB: a large human motion database人类动作视频数据集介绍及百度云下载链接分享

热门文章

  1. 知识点 channel的使用
  2. STM32基于HAL库自由启动和关闭定时器:
  3. 零基础学Linux运维,看这一篇就够了(含30G自学教程笔记)
  4. ros与stm32串口通信
  5. pmp考试是什么?适合哪些人学?含金量?(含pmp资料)
  6. 小迪安全视频-学习笔记(收藏)
  7. java通过手机号查询联系人_在java中如何根据手机号查询号码归属地
  8. SAP 面试题 训练
  9. Qt 使用Visa库与数字仪器仪表TCP/IP通信(SCPI指令自动化测试)
  10. 项目需求讨论-APP手势解锁及指纹解锁