`

1.2自己写的数组,为什么会出现数组越界异常

阅读更多
为了复习一下数据结构,今天写了一个模拟数组的程序,不知道什么会出现数组越界异常,拿出来大家共同讨论一下。
MyArray类如下:
//MyArray.java
//创建一个数组类
package utillity.array;

public class MyArray {
	private long[] arr;
	private int len;
	//构造方法
	public MyArray(int len){
		this.setLen(len);
		arr = new long[len];
	}
	//set方法
	public void setElemnt(int index, long value){
		this.arr[index] = value;
	}
	//get方法
	public long getElement(int index){
			return this.arr[index];
	}
	public void setLen(int len){
		this.len = len;
	}
	public int getLen(){
		return this.len;
	}
	/**
	 *
	 *打印数组各元数
	 */
	public void print(){
		for(int i=0; i<this.getLen(); i++){
			System.out.print("arr["+i+"]="+this.getElement(i)+" ");
		}
		System.out.println();
	}
	/**
	 * 
	 * @param serchValue
	 * @return 查找到了那个数组下标值,如果没找到,返回-1
	 */
	public int serch(int serchValue){
		int i = 0;
		int index = -1;
		for(i=0; i<this.getLen(); i++){
			if(this.getElement(i)==serchValue){
				index = i;
				break;
			}
		}
		if(i==this.getLen()){
			System.out.println("你查找的值不存在!");
		}
		return index;
	}
	/**
	 * 删除
	 * @param delValue
	 * 如果数组中存在和所给相等的元数,则删除
	 */
	public void delete(int delValue){
		int index = this.serch(delValue);
		if(index != -1){
			for(int j=index; j<this.getLen();j++){
				this.setElemnt(j, this.getElement(j+1));
			}
			this.setLen(this.getLen()-1);		
		}else{
			System.out.println("不存在值为"+delValue+"的数组元数");
			return;
		}
		
	}
}


下面是测试类:
package utillity.array;

public class TestMyArray {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyArray arr;
		arr = new MyArray(10);
		arr.setElemnt(0,45);
		arr.setElemnt(1,23);
		arr.setElemnt(2,34);
		arr.setElemnt(3,46);
		arr.setElemnt(4,48);
		arr.setElemnt(5,65);
		arr.setElemnt(6,69);
		arr.setElemnt(7,52);
		arr.setElemnt(8,100);
		arr.setElemnt(9,32);
		//------------------------------测     试---------------------------------------
		// 显示数组元数
		arr.print();
		//----------------------------------------------------------------------------
		//查找
		int index = arr.serch(100);
		if(index!= -1){
			System.out.println("查找信息:arr["+index+"]="+arr.getElement(index));
		}
		//-----------------------------------------------------------------------------
		//删除
		arr.delete(48);

	}

}


不知道为什么总报这个异常,我不会debug,希望大家指正一下,谢谢!
arr[0]=45 arr[1]=23 arr[2]=34 arr[3]=46 arr[4]=48 arr[5]=65 arr[6]=69 arr[7]=52 arr[8]=100 arr[9]=32
查找信息:arr[8]=100
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at utillity.array.MyArray.getElement(MyArray.java:19)
at utillity.array.MyArray.delete(MyArray.java:66)
at utillity.array.TestMyArray.main(TestMyArray.java:33)
分享到:
评论

相关推荐

    java数组总结使用手册

    需要注意的是,数组越界异常是非常常见的错误。例如,尝试访问不存在的元素会导致`ArrayIndexOutOfBoundsException`。 ```java int[] arr = new int[3]; System.out.println(arr[5]); // 抛出 ...

    day04-IDEA工具&数组1

    出现原因是arr = null,这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出NullPointerException空指针异常。解决方案是给数组一个真正的堆内存空间引用即可! ...

    java数组应用

    此外,Java会对数组索引进行越界检查,以确保安全性和避免程序崩溃。 ##### 1.3 一维数组的初始化 数组可以在定义时初始化,或者在定义之后通过循环等方式进行初始化。例如: ```java int a[] = {1, 2, 3, 4, 5}; ...

    VC++程序设计--第六章-数组.pdf

    这种越界访问可能会导致未定义的行为,是编程时需要避免的错误。 了解了这些基础知识后,程序员就可以有效地利用数组处理批量数据,实现各种复杂算法和功能。在后续章节中,还将进一步探讨多维数组和字符数组的应用...

    第18章、数组上机指导(实践课).ppt

    - 错误处理:合理处理各种异常情况,比如数组越界等问题。 #### 三、总结讲解 - **回顾**:本章重点介绍了如何在C语言中使用一维数组和二维数组,并通过一个具体的项目——“软件测试工程师管理系统”来实践这些...

    高职招考计算机类程序的设计数组知识.doc

    如果输入2、4、6,B数组将包含6、4、2,而由于k在循环结束后为3,所以最后一句打印B(k)会报错,因为数组索引越界。 6. 第六段代码首先用2的倍数填充数组A,然后在第二个循环中,数组A的中间元素由前后两个元素的和...

    JAVA学习笔记

    // 数组越界异常 ``` 由于 `scores` 数组只有五个元素(索引从 0 到 4),访问索引 5 会引发异常。 #### 1.4 动态创建数组 可以使用 `new` 关键字动态地创建数组,并指定数组的大小: ```java int[] arr = new int...

    初识JAVA数组

    Java会对数组元素进行越界检查,确保安全性。同时,数组有一个内置的`length`属性,可以获取数组的长度,如`intArray.length`。 下面是一个简单的示例: ```java public class ArrayTest { public static void ...

    Java基础知识-day05 【异常、线程】.pdf

    出现异常,不要紧张,把异常的简单类名,拷贝到API中去查。 1.3 异常分类 我们平常说的异常就是指Exception,因为这类异常一旦出现,我们就要对代码进行更正,修复程序。异常(Exception)的分类: * 编译时期...

    VxWorks系统异常分析方法.pdf

    - 堆栈写越界:数组越界修改了堆栈中其他变量或函数参数。 - 堆栈溢出:函数声明的大数组超出堆栈容量。 - 内存改写:未初始化的指针、空指针访问、内存操作范围越界。 - 系统调用不当:在中断回调中使用可能引发...

    Android异常处理

    - **RuntimeException体系**:包括类型转换错误、数组越界访问等,通常认为是程序员的错误。 - **非RuntimeException体系**:如`IOException`等,通常是由外部因素导致的。 ##### 2.2 每个类型的异常的特点 - **...

    SCJP 考证要点复习资料整理

    Java数组知道自己的大小,且有边界检查,防止越界访问。当试图访问超出范围的数组元素时,会抛出`ArrayIndexOutOfBoundsException`异常。例如: ```java int[] num = new int[5]; for(int i = 0; i ; i++) { num[i]...

    OutPut(异常 )

    - **RuntimeException体系**:包括错误的类型转换、数组越界等,这些异常通常是由程序员的错误导致的,可以通过改进代码来避免。 - **其他异常**:如`IOException`等,这些异常通常是由外部环境引起的,不是程序...

    精通JAVA处理异常

    - **运行时异常**(`RuntimeException`):这是异常层次结构中的一种特殊情况,表示错误可能是由于编程错误引起的,例如数组越界、空指针异常等。这类异常不需要在方法签名中声明,因为它们通常是由编程错误引起的,...

    C语言一维数组初步学习笔记

    在C语言中,一维数组是一种非常基础且重要的数据结构,它允许我们...在实际编程中,需要注意数组下标的合法性,避免数组越界,并熟练掌握数组的遍历和长度计算。字符数组和字符串处理函数在处理文本数据时尤为关键。

    异常、Colletion、List

    1. **运行时异常(Runtime Exception)**:这类异常通常由编程错误引起,例如数组越界异常`ArrayIndexOutOfBoundsException`。运行时异常的特点是在程序运行时才会被发现,它们通常是由于逻辑错误导致的。 例如:...

    C与C++中的异常处理

    - **运行时异常**:这些异常通常是由运行时环境引发的,例如除以零、数组越界等。 - **资源异常**:例如内存分配失败。 - **逻辑异常**:这些异常通常由程序错误引发,例如无效的参数值、算法错误等。 **1.2 异常的...

    2020傲梦第二届等级测评复习资料(C++四级)

    根据给定的“2020傲梦第二届等级测评复习资料(C++四级)”文档内容,...此外,还需要注意一些常见的陷阱,比如数组越界等问题,这些都是实际开发中容易犯错的地方。希望以上总结能够帮助大家更好地准备等级测评考试。

    EightNumber1.2.rar_八数码_八数码问题

    1. **状态表示**:每个状态代表了当前的棋盘布局,可以用二维数组来表示,其中数字1到8表示方块,0表示空白位置。 2. **操作定义**:定义了在状态之间移动方块的操作,如上、下、左、右四个基本方向。每次操作都会...

    零起点学通C++多媒体范例教学代码

    8.3 为什么使用指针 8.3.1 栈和堆 8.3.2 用指针创建堆中空间 8.3.3 用指针删除堆中空间 8.4 动态内存 8.4.1 内存泄漏 8.4.2 在堆中创建对象 8.4.3 在堆中删除对象 8.4.4 访问堆中的数据成员 8.4..5 在构造函数中开辟...

Global site tag (gtag.js) - Google Analytics