2017-12-29 6 views
0

Das Programm beginnt mit der Aufforderung an den Benutzer, der Variablen n einen Wert zuzuweisen. Der Benutzer wird dann aufgefordert, lange Ziffern n mal einzugeben. Die Ziffern werden dann im initialisierten Array gespeichert (ar). Die Funktion, die ich versuche, aVeryBigSum zu erstellen, besteht darin, die Zahlen im Array durchzuschleifen und die Zahlen im Array um sum=0 zu erhöhen, um die Summe (Java) bereitzustellen.Issue increment sum = 0 von langen Ganzzahlen übergeben 9 Ziffern in Java

Aus irgendeinem Grund funktioniert das Programm jedoch, wenn ich nicht zwei aufeinanderfolgende Nummern mit mehr als 9 Ziffern verwende.

Zum Beispiel:

aVeryBigSum(2,[111111111,111111111]) hat n von 2 und zwei 9 Ziffern in dem Array

Output:

aVeryBigSum(2,[1111111111,1111111111]) hat n von 2 und zwei 10 Ziffern im Array Ausgabe:

-2072745074

Jede Idee, was das Problem sein könnte? Ich habe das Programm unten angegeben:

import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class Main { 

    static long aVeryBigSum(int n, long[] ar) { 
     int sum = 0; 
     for (int i = 0; i < n; i++){ 
      System.out.println(sum); 
      System.out.println(ar[i]); 
      sum += ar[i]; 
      System.out.println(" "); 
     } 
     return sum; 
    } 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     int n = in.nextInt(); 
     long[] ar = new long[n]; 
     for(int ar_i = 0; ar_i < n; ar_i++){ 
      ar[ar_i] = in.nextLong(); 
     } 
     long result = aVeryBigSum(n, ar); 
     System.out.println(result); 
    } 
} 
+0

[? Scanner wird das Überspringen nextline() übernächsten() verwendet, nextInt() oder andere nextFoo()] (// stackoverflow.com/q/13102045) oder ähnliches. –

+0

@JohnnyMopp. Sieht eher wie ein einfacher Integer-Überlauf aus. –

+2

Mögliches Duplikat von [Warum führt die Erhöhung eines Java-Int schließlich zu einer negativen Zahl?] (Https://stackoverflow.com/questions/10968733/why-does-incrementing-a-java-int-eventually-result-in- a-negative-Nummer) – Dukeling

Antwort

1

Ihr Problem in der Leitung ist

int sum = 0; 

Es sollte

long sum = 0; 

lesen Sie sind Integer-Überlauf Auslösung, wenn die Summe der ganzen Zahlen 32 überschreitet Bits.

0

Ja, stimme Mad Physicist zu. Sie müssen long sum = 0 verwenden. Aber um völlig korrekt zu sein, haben Sie die Möglichkeit, eine Summe größer als Long.MAX_VALUE zu haben. Sie könnten z.B. BigDecimal:

static BigDecimal aVeryBigSum(int n, long[] ar) { 
    BigDecimal sum = BigDecimal.ZERO; 

    for (int i = 0; i < n; i++) { 
     System.out.println(sum); 
     System.out.println(ar[i]); 

     sum = sum.add(new BigDecimal(ar[i])); 

     System.out.println(" "); 
    } 

    return sum; 
} 
Verwandte Themen