2016-11-03 4 views
0

Ich bin auf diesem Code arbeiten, die große Zahlen verwenden:Java - Lange Liste ERROR: inkompatible Typen

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

Aber ich bin nicht in der Lage, eine Lösung für diesen Fehler zu finden:

error

Was bedeutet das? Ich bin nicht wirklich gut in Java, aber das ist so einfach Code, was ist los?

+1

Wie dieser Fehler Sie gesagt, Sie sind eine lange anstelle eines int in der get-Methode. Dies bedeutet, dass Java Ihre Länge abschneiden müsste, wenn der Wert höher als das int-Limit ist. So hat es dir gesagt, es gibt einen Fehler – AxelH

+0

1e + 15 >>> 2147483647 .. Ich kann Int nicht verwenden, so kann ich nicht verwenden Listen..Thnak Sie – Teshtek

+0

Array sind Integer basierend auf glaube ich;) Sie müssten also einige finden Tricks (wie mehrere Listen). Aber warum so viel? Die Erinnerung wäre genug? – AxelH

Antwort

3

Listen in Java sind int -indexed, wie Sie in der javadoc von List.get() sehen können, und Sie versuchen, Elemente von einem long Index zu erhalten. Wenn Sie Listen benötigen, die größer als der Ganzzahlbereich sind, benötigen Sie eine andere Datenstruktur, die dies unterstützt. Sie können List nicht verwenden.

1

Wie Janos sagte, können Sie lange Index in einer Liste nicht verwenden. Aber aus Ihrem Code brauchen Sie die Liste nicht, Sie verwenden nur den letzten berechneten Wert.

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

Wenn Sie wirklich alle Werte behalten möchten, können Sie diese in einer Datei speichern, sondern von dem, was ich sehe, Sie diejenigen, die nicht brauchen.

Of couse, wird die Schleife einige Zeit dauern;)

Verwandte Themen