读书人

参数ArrayList 编写一个可以复制自身的

发布时间: 2012-02-28 13:06:36 作者: rapoo

参数ArrayList 编写一个可以复制自身的方法。请高手检查越界原因

Java code
import java.util.*;public class test  {    public static void main(String []args){                        ArrayList<String> list = new ArrayList<String>();        list.add("how");        list.add("are");        list.add("you");                                doubleList(list);        System.out.print(list.toString());            }    public static void doubleList(ArrayList<String> list){        for(int i = 0; i<list.size(); i++){            list.add(i*2,list.get(i*2) );                    }            }        }





编译报错
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 6, Size: 6
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
at test.doubleList(test.java:20)
at test.main(test.java:14)
我手动添加也没有发现越界啊

list.add(0, "how");
list.add(2,"are");
list.add(4,"you");


求真相。。。

[解决办法]
数组越界的原因在于这一行list.add(i*2,list.get(i*2) );
不是很清楚你要复制List的效果是什么,描述清楚一些
[解决办法]
i*2
[解决办法]
<=list.size(); 试一试 本人菜鸟 高手勿喷勿喷
[解决办法]
<=list.size(); 试一试 本人菜鸟 高手勿喷勿喷
[解决办法]
Java code
/**     * Checks if the given index is in range.  If not, throws an appropriate     * runtime exception.  This method does *not* check if the index is     * negative: It is always used immediately prior to an array access,     * which throws an ArrayIndexOutOfBoundsException if index is negative.     */    private void RangeCheck(int index) {    if (index >= size)        throw new IndexOutOfBoundsException(        "Index: "+index+", Size: "+size);    }
[解决办法]
for(int i = 0; i<list.size(); i++){
list.add(i*2,list.get(i*2) );

原排列 0 1 2
要加到 3 4 5 位

可程序中写成加到 0 2 4(注意 list.get(4)时候溢出。)
int size = list.size(); //计算原list大小。
使用list.add(i+size,list.get(i));
[解决办法]
public static void doubleList(ArrayList<String> list){
for(int i = 0; i<list.size(); i++){
list.add(i,list.get(i) );
list.add(i+1,list.get(i) );
}

}
这样不行吗?
[解决办法]
这是根据楼主的意思实现的代码,请参考
Java code
import java.util.*;public class Test{    public static void main(String []args){        ArrayList<String> list = new ArrayList<String>();        list.add("how");        list.add("are");        list.add("you");        doubleList(list);        System.out.print(list.toString());    }    public static void doubleList(ArrayList<String> list){        String[] strAry=new String[list.size()];        list.toArray(strAry);//        for(String s:strAry){//            System.out.println(s);//        }        for(int i = 0; i<strAry.length; i++){            list.add(i*2,strAry[i] );        }    }}
------解决方案--------------------


探讨

Java code

public static void doubleList(ArrayList<String> list){
for(int i = list.size() - 1; i >= 0; i --){
list.add(i, list.get(i) );

}



稍微改了下可……

[解决办法]
探讨
引用:

Java code
..

稍微改了下可……

list的长度是3,……

[解决办法]
Java code
import java.util.*;public class test  {    public static void main(String []args){                        ArrayList<String> list = new ArrayList<String>();        list.add("how");        list.add("are");        list.add("you");                                doubleList(list);        System.out.print(list.toString());            }    public static void doubleList(ArrayList<String> list){        int oldSize = list.size();        for(int i = 0; i<oldSize; i++){            list.add(i*2,list.get(i*2) );                    }            }        } 

读书人网 >J2SE开发

热点推荐