Java - 长列表错误:不兼容的类型

时间:2016-11-03 07:12:30

标签: java long-integer

我正在研究使用大数字的代码:

import java.math.*;
import java.util.*;
import java.lang.*;

public class main {
    public static void main(String[] args){
        double max = 1e+15;
        List<Integer> sum = new ArrayList<Integer>();
        sum.add(1);
        long aux = 0;
        for(long i = 1;i<max;i++){
            sum.add(sum.get(i-1)+scomponi(sum.get(i-1),aux));  
            if(i+1==1e+7 || i+1==1e+8 || i+1==1e+9 || i+1 == 1e+10 || i+1 == 1e+10 || i+1==1e+11 || i+1==1e+12 || i+1==1e+13 || i+1==1e+14)
                System.out.println(i+1+"-imo -> "+sum.get(i));  
        }
        System.out.println(sum.get(sum.size()-1)); 
    }    


    public static Long scomponi(Long num,Long tot) {
        while (num > 0) {
            Long digit = num % 10;
            tot += digit;
            num /= 10;
        }
        return tot;
    }
}  

但我无法找到解决此错误的方法:

error

这意味着什么?我不是很擅长java,但这是如此简单的代码,出了什么问题?

2 个答案:

答案 0 :(得分:3)

Java中的列表int - 已编入索引,您可以在List.get()的javadoc中看到,并且您正尝试通过long索引获取元素。

如果您需要大于整数范围的列表,则需要另一个支持该列表的数据结构,您不能使用List

答案 1 :(得分:1)

就像janos所说,你不能在List中使用长索引。但是从你的代码中,你不需要列表,你只使用最后计算的值。

public static void main(String[] args){
    double max = 1e+15;
    long last = 1;
    long aux = 0;
    for(long i = 1;i<max;i++){
        last += scomponi(last,aux);
        if(i+1==1e+7 || i+1==1e+8 || i+1==1e+9 || i+1 == 1e+10 || i+1 == 1e+10 || i+1==1e+11 || i+1==1e+12 || i+1==1e+13 || i+1==1e+14)
            System.out.println(i+1+"-imo -> "+last);
    }
    System.out.println(last);
}

如果你真的想要保留每个值,你可以将它们存储到一个文件中,但从我看到的,你不需要那些。

当然,循环需要一些时间;)