错误内容是
Exception in thread “main” java.lang.ArrayStoreException: java.lang.Integer
at Array.Array.add(Array.java:52)
at Array.Array.addLast(Array.java:37)
at Array.Main.main(Main.java:9)
public static void main(String[] args) {
Array<Integer> arr = new Array<Integer>(20);
for(int i = 0 ; i < 10; i++){
arr.addLast(i);
}
System.out.println(arr);
}
public void addLast(E e){
add(size,e);
}
public void add(int i,E e){
if(size == data.length){
throw new IllegalArgumentException("AddLast failed.Array is full.");
}
for(int j=size-1;j>=i;j--){
data[j]=data[j-1];
}
data[i] = e;
size++;
}//i没判断。
最初怀疑是int没有自动装箱,但JDK版本确实是1.8
而且,添加了手动装箱的代码后报同样错误。
没辙了。
请老师同学们帮我看看……
下面是完整代码
Array类
private E[] data;
private int size;
public Array(int capacity){
data = (E[])new Object[capacity];
size = 0;
}
public Array(){
this(10);
}
public int getSize(){
return size;
}
public int getCapacity(){
return data.length;
}
public boolean isEmpty(){
return size == 0;
}
public void addLast(E e){
add(size,e);
}
public void addFirst(E e){
add(0,e);
}
public void add(int i,E e){
if(size == data.length){
throw new IllegalArgumentException("AddLast failed.Array is full.");
}
for(int j=size-1;j>=i;j--){
data[j]=data[j-1];
}
data[i] = e;
size++;
}//i的元素没判断。
@Override
public String toString(){
StringBuilder res = new StringBuilder();
res.append(String.format("Array: size = %d , capacity = %d\n",size,data.length));
res.append('[');
for(int i = 0 ; i < size ;i ++){
res.append(data[i]);
if(i != size - 1){
res.append(",");
}
}
res.append(']');
return res.toString();
}
//获取数组元素
E get(int index){
if(index < 0 || index >= size)
throw new IllegalArgumentException("Get failed.Index is illegal.");
return data[index];
}
//修改数组元素
void set(int index,E e){
if(index < 0 || index >= size)
throw new IllegalArgumentException("Get failed.Index is illegal.");
data[index] = e;
}
//查找数组中是否有元素e;
public boolean contains(E e){
for (int i = 0;i < size ; i++){
if(data[i].equals(e))
return true;
}
return false;
}
//找不到返回-1
public int find(E e){
for(int i = 0 ; i < size ; i++){
if(data[i].equals(e)){
return i;
}
}
return -1;
}
//找到全部的元素e
public Array findAll(E e){
Array a = new Array();
for(int i = 0;i < size ;i++){
if (data[i] == e) {
a.addLast(i);
}
}
return a;
}
//删除指定序号的元素
public E del(int index){
E ret = data[index];
for(int i = index;i < size ; i++){
data[i]=data[i+1];
}
size--;
data[size]=null;
return ret;
}
public void delFirst(int e) {
del(1);
}
public void delLast(int e) {
del(size-1);
}
//删除指定元素e
public void removeElement(E e){
int index = find(e);
if(index!=-1){
del(index);
}
index = find(e);
if(index == -1){
System.out.println("元素"+e+"已被删除。");
}else{
System.out.println("好像还有别的"+e+"没有被删除。");
}
}
//删除全部是e的元素。
public void removeAllElement(E e){
while(find(e)!=-1){
removeElement(e);
}
}
Main类
public class Main {
public static void main(String[] args) {
Array<Integer> arr = new Array<Integer>(20);
for(int i = 0 ; i < 10; i++){
arr.addLast(i);
}
System.out.println(arr);
arr.add(3,3);
System.out.println(arr);
arr.removeAllElement(3);
System.out.println(arr);
}
}