Possible loss of precision erwartet, aber...

Cyam

Mitglied
Hallo,

ich habe einen QC verfasst, der die Summe aus eingegebenen Zahlen (double-Werte) bildet.

Java:
public class MError

{
    
    
    public void ausgabeSumme(double[] noten)
    {
        
        //double summe = 0; "absichtlich mal auskommentiert"
        for (int index =  0,  summe = 0; index < noten.length; index++)
        {  
           summe += noten[index]; //--> keine Fehlermeldung
           
   /**   summe = summe + noten[index]; --> Fehlermeldung "possible loss of precision - found double, required int" */
          
                       
        }
    }
}

Bildung der Summe:

1. summe += noten[index];
2. summe = summe + noten[index];

Bei der 1. Variante erhalte ich keine Fehlermeldung, obwohl ein loss of precision zu erwarten ist.
Mit der 2. Variante erhält man die "gewünschte" Fehlermeldung.

Kann mir jemand erklären, wieso beim 1. Versuch der "double-Wert" übergangen und in einen "int-Wert" umgewandelt wird ???:L

Schonmal vielen Dank!
 

Ruzmanz

Top Contributor
Sichbarkeit von Variablen.

for (int index = 0, summe = 0; index < noten.length; index++)

Ah, sry hat nichts mit der Sichtbarkeit von Variablen zu tun ... Du hast das erste ja auskommentiert. Du sagst in der For-Schleife, dass summe ein Integer ist und wenn du einen Integer ein Double zuweist, dann wird der gecastet.
 
Zuletzt bearbeitet:

Cyam

Mitglied
Ja, aber wieso übersetzt er dann die 2. Variante nicht?

btw - Wäre eine Fehlermeldung bei der 1. nicht logischer?

Habe leider in der JavaDoc. nichts gefunden, ob die sich die Funktionsweise von "y=y+x" und "y+=x" unterscheidet.
 

Ähnliche Java Themen

Neue Themen


Oben