当前位置: 代码迷 >> J2SE >> 关于Arraylist<Integer>溢出有关问题
  详细解决方案

关于Arraylist<Integer>溢出有关问题

热度:32   发布时间:2016-04-23 20:13:24.0
关于Arraylist<Integer>溢出问题
public class Test02 {

public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list = getSuShu(list, 2);
System.out.println(list.get(100000));
}

private static  ArrayList<Integer> getSuShu(ArrayList<Integer> list, Integer num){
if(list.size()==100001) return list;
for(int i=0;i<list.size();i++){
if(num%list.get(i)==0) return getSuShu(list, num+1);
}
System.out.println(num);
list.add(num);
return getSuShu(list, num+1);
}
}

好奇怪啊,我试着打印,然后发现在23833的时候溢出了,为什么啊,我查了一下,Integer的范围很大啊,list也分配了很多内存空间啊
------解决思路----------------------
没看懂你这个方法getSuShu是要干什么,而且这样递归调用,程序很快就会挂的。
------解决思路----------------------
看样子递归出了问题;
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:


//算素数不用递归。递归深度太大会溢出。
public static void main(String[] args) throws Exception {
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(2);
    for(int i=3;i<100000;i++){
     getSuShu(list, i);
    }
}

     
    private static     void getSuShu(ArrayList<Integer> list, Integer num){
        for(int i=0;i<list.size();i++){
            if(num%list.get(i)==0){
             return;
            }
        }
        System.out.println(num);
        list.add(num);
        return ;
    }
当然这样算素数尤其是大素数的效率并不高,有兴趣可在网上找找相关的算法
.。。。。。。。。。。这个我也会,真的要运行有一会儿的时间,不爽啊,简直了
按你的方法递归,就算不溢出,在效率上没有优势。
为什么啊?递归不是效率非常高吗?

1、没有万能的方法。2、而且你完全是为了递归而递归。关于递归好的运用可以看看快速排序。
  相关解决方案