int numMoved = size - index - 1;

解决方案 »

  1.   

    java的数组是不可变长度的//myList.add("11");   取消这2行的注释应该就出错了吧?!
    //myList.add("12");
    为什么不用 java.util.ArrayList  呢?重新发明轮子效率不高啊!
      

  2.   

    我在做习题啊,不过我好像看错了,我以为是要写一个实现ArrayList的程序,不过写出来没有能实现觉得挺懊恼的,所以来这里求助一下啊。
      

  3.   

    问题出在第六行
    private String [] elementData = new String[10];elementData在定义的同时进行了初始化,因此它不能再指向其他数组了。分开来,定义的时候:
    private String[] elementData;然后再在构造函数里面加一行:
    elementData = new String[10];
      

  4.   

    我按照 shhgs() 的说法改了一下,不过还是不行,还是要有 java.lang.ArrayIndexOutOfBoundsException: 10
    at MyArrayList.add(MyArrayListTest.java:38)
    at MyArrayListTest.main(MyArrayListTest.java:82)
    Exception in thread "main" //我是这么改的,应该对的吧。
    //:ArrayList.java
    //Creates an ArrayList and shows the datas.
    import java.util.*;class MyArrayList {
    private String [] elementData ;
    private int size;

    private MyArrayList() {
    size = 0;
    elementData = new String [10];
    }

    public static MyArrayList makeAList() {
    return new MyArrayList();
    }

    private void ensureCapacity() {
    if(size > elementData.length) {
    int oldCapacity = elementData.length;
    int newCapacity = (oldCapacity*3)/2 + 1;

    String [] oldData = new String [oldCapacity];
    oldData = elementData;

    elementData = new String [newCapacity];
    System.out.println(elementData.length);
    System.arraycopy(oldData,0,elementData,0,size-1);
    }
    }





    public boolean add(String data) {
    ensureCapacity();
    elementData[size++] = data;
    return true;
    }

    public boolean remove(int index) {
    if(index<0 | index >size - 1) {
    System.out.println("Out of Range!");
    return false;
    }
    else 
        if(index == (size - 1)) {
         elementData[--size] = null;
            return true;
    }
    else {
    int numMoved = size - index;
    if(numMoved > 0)
        System.arraycopy(elementData,index+1,elementData,index,numMoved);
        elementData[--size] = null;
    return true;

                    }
            }
            
            public void showList() {
             for(int i = 0;i<size;i++)
                 System.out.print(elementData[i]+" ");
             System.out.print("\n");
             }
    }public class MyArrayListTest {
    public static void main(String [] args) {
    MyArrayList myList = MyArrayList.makeAList();
    myList.add("1");
    myList.add("2");
    myList.add("3");
    myList.add("4");
    myList.add("5");
    myList.add("6");
    myList.add("7");
    myList.add("8");
    myList.add("9");
    myList.add("10");
    myList.add("11");
    //myList.add("12");

    myList.showList();
    boolean condition = myList.remove(9);
    if(!condition) {
    System.out.println("Unable to remove emelentData");
    }
    else {
    System.out.print('\n');
            myList.showList();
    }
    }
    }





      

  5.   

    问题出在ensureCapacity的第一行。
     if(size > elementData.length)应该是
     if(size >= elementData.length)
      

  6.   

    恩,终于改好了。
    不过这里System.arraycopy(oldData,0,elementData,0,size-1);最后参数应该是size不然会有问题的。结帐!