Java数组越界------利用一维数组模拟栈数据结构
压栈时一直报错,开始的代码
package com.zjiedonl.javase.array;
//用一维数组模拟栈
public class MystackTest {
//为什么用Object类型数组,因为这个栈可以存储任何类型的数据类型
private Object[] elememts = new Object[10];
//栈帧,永远指向栈顶元素
//最初栈是空的,一个元素都没有
//栈帧等于-1表示栈帧指向顶部元素,0表示指向顶部元素的上方
private int index = -1;
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public Object[] getElememts() {
return elememts;
}
public void setElememts(Object[] elememts) {
this.elememts = elememts;
}
public MystackTest() {
}
public MystackTest(int index, Object[] elememts) {
this.index = index;
this.elememts = elememts;
}
//压栈
public void push(Object obj){
if(index>elememts.length-1){
System.out.println("栈满了");
return;
}
index++;
elememts[index] = obj;
System.out.println("压栈"+elememts[index]+"元素成功,栈帧指向"+index);
}
//弹栈
public void pop(){
if(index<0){
System.out.println("栈空了");
return;
}
index--;
System.out.println("弹栈成功,弹出"+elememts[index+1]+"元素成功,栈帧指向"+index);
}
public static void main(String[] args) {
//Object[] ele = new Object[10];
MystackTest ms = new MystackTest();
ms.push("331");
ms.push("332");
ms.push("333");
ms.push("334");
ms.push("335");
ms.push("336");
ms.push("337");
ms.push("338");
ms.push("339");
ms.push("330");
ms.push("333");
ms.pop();
}
}
报错
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at com.zjiedonl.javase.array.MystackTest.push(MystackTest.java:43)
at com.zjiedonl.javase.array.MystackTest.main(MystackTest.java:70)
java.lang.ArrayIndexOutOfBoundsException表示数组越界错误,43行和70行
即这一段代码
public void push(Object obj){
if(index>elememts.length-1){
System.out.println("栈满了");
return;
}
index++;
elememts[index] = obj;
System.out.println("压栈"+elememts[index]+"元素成功,栈帧指向"+index);
}
elememts.length-1为9,当index为9时就表示这个数组满了,不能再再加入元素9>9时没有进入if里面,而是index继续加1, elememts[index]= elememts[10],数组越界,应该改为:
//压栈
public void push(Object obj){
if(index>=elememts.length-1){
System.out.println("栈满了");
return;
}
index++;
elememts[index] = obj;
System.out.println("压栈"+elememts[index]+"元素成功,栈帧指向"+index);
}
运行结果正确