为了复习一下数据结构,今天写了一个模拟数组的程序,不知道什么会出现数组越界异常,拿出来大家共同讨论一下。
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)
分享到:
相关推荐
需要注意的是,数组越界异常是非常常见的错误。例如,尝试访问不存在的元素会导致`ArrayIndexOutOfBoundsException`。 ```java int[] arr = new int[3]; System.out.println(arr[5]); // 抛出 ...
出现原因是arr = null,这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出NullPointerException空指针异常。解决方案是给数组一个真正的堆内存空间引用即可! ...
此外,Java会对数组索引进行越界检查,以确保安全性和避免程序崩溃。 ##### 1.3 一维数组的初始化 数组可以在定义时初始化,或者在定义之后通过循环等方式进行初始化。例如: ```java int a[] = {1, 2, 3, 4, 5}; ...
这种越界访问可能会导致未定义的行为,是编程时需要避免的错误。 了解了这些基础知识后,程序员就可以有效地利用数组处理批量数据,实现各种复杂算法和功能。在后续章节中,还将进一步探讨多维数组和字符数组的应用...
- 错误处理:合理处理各种异常情况,比如数组越界等问题。 #### 三、总结讲解 - **回顾**:本章重点介绍了如何在C语言中使用一维数组和二维数组,并通过一个具体的项目——“软件测试工程师管理系统”来实践这些...
如果输入2、4、6,B数组将包含6、4、2,而由于k在循环结束后为3,所以最后一句打印B(k)会报错,因为数组索引越界。 6. 第六段代码首先用2的倍数填充数组A,然后在第二个循环中,数组A的中间元素由前后两个元素的和...
// 数组越界异常 ``` 由于 `scores` 数组只有五个元素(索引从 0 到 4),访问索引 5 会引发异常。 #### 1.4 动态创建数组 可以使用 `new` 关键字动态地创建数组,并指定数组的大小: ```java int[] arr = new int...
Java会对数组元素进行越界检查,确保安全性。同时,数组有一个内置的`length`属性,可以获取数组的长度,如`intArray.length`。 下面是一个简单的示例: ```java public class ArrayTest { public static void ...
出现异常,不要紧张,把异常的简单类名,拷贝到API中去查。 1.3 异常分类 我们平常说的异常就是指Exception,因为这类异常一旦出现,我们就要对代码进行更正,修复程序。异常(Exception)的分类: * 编译时期...
- 堆栈写越界:数组越界修改了堆栈中其他变量或函数参数。 - 堆栈溢出:函数声明的大数组超出堆栈容量。 - 内存改写:未初始化的指针、空指针访问、内存操作范围越界。 - 系统调用不当:在中断回调中使用可能引发...
- **RuntimeException体系**:包括类型转换错误、数组越界访问等,通常认为是程序员的错误。 - **非RuntimeException体系**:如`IOException`等,通常是由外部因素导致的。 ##### 2.2 每个类型的异常的特点 - **...
Java数组知道自己的大小,且有边界检查,防止越界访问。当试图访问超出范围的数组元素时,会抛出`ArrayIndexOutOfBoundsException`异常。例如: ```java int[] num = new int[5]; for(int i = 0; i ; i++) { num[i]...
- **RuntimeException体系**:包括错误的类型转换、数组越界等,这些异常通常是由程序员的错误导致的,可以通过改进代码来避免。 - **其他异常**:如`IOException`等,这些异常通常是由外部环境引起的,不是程序...
- **运行时异常**(`RuntimeException`):这是异常层次结构中的一种特殊情况,表示错误可能是由于编程错误引起的,例如数组越界、空指针异常等。这类异常不需要在方法签名中声明,因为它们通常是由编程错误引起的,...
在C语言中,一维数组是一种非常基础且重要的数据结构,它允许我们...在实际编程中,需要注意数组下标的合法性,避免数组越界,并熟练掌握数组的遍历和长度计算。字符数组和字符串处理函数在处理文本数据时尤为关键。
1. **运行时异常(Runtime Exception)**:这类异常通常由编程错误引起,例如数组越界异常`ArrayIndexOutOfBoundsException`。运行时异常的特点是在程序运行时才会被发现,它们通常是由于逻辑错误导致的。 例如:...
- **运行时异常**:这些异常通常是由运行时环境引发的,例如除以零、数组越界等。 - **资源异常**:例如内存分配失败。 - **逻辑异常**:这些异常通常由程序错误引发,例如无效的参数值、算法错误等。 **1.2 异常的...
根据给定的“2020傲梦第二届等级测评复习资料(C++四级)”文档内容,...此外,还需要注意一些常见的陷阱,比如数组越界等问题,这些都是实际开发中容易犯错的地方。希望以上总结能够帮助大家更好地准备等级测评考试。
1. **状态表示**:每个状态代表了当前的棋盘布局,可以用二维数组来表示,其中数字1到8表示方块,0表示空白位置。 2. **操作定义**:定义了在状态之间移动方块的操作,如上、下、左、右四个基本方向。每次操作都会...
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 在构造函数中开辟...