2016-11-03 30 views
0

我工作的这个代码,使用大的数字:爪哇 - 一长串错误:不兼容的类型

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中并不擅长,但是这是如此简单的代码,出了什么问题?

+1

就像这个错误告诉你,你在get方法中使用long而不是int。这意味着,当值将高于int限制时,Java需要截断多余的内容。所以它告诉你有一个错误 – AxelH

+0

1e + 15 >>> 2147483647 ..我不能使用INT,所以我不能使用列表..Thnak你 – Teshtek

+0

数组是基于整数我相信;)所以你需要找到一些技巧(如多个列表)。但为什么这么多?记忆足够了吗? – AxelH

回答

3

Java中的列表有int索引,你可以在List.get()的javadoc中看到,而你试图通过long索引得到元素。

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

1

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

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); 
} 

如果你真的想保持每一个值,你可以存储这些成一个文件但是从我看到的,你不需要这些。

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