2016-04-11 10 views
5

ich einige Berechnungen für mein Projekt zu berechnen, ich versuche, und ich bekomme folgende java.lang.ClassCastException für
y2= (double) molWt[x];eine Zahl Gießen zu verdoppeln

molWt und dist sind zwei Array vom Typ Anzahl und double sind.

java.lang.ClassCastException:

y2 = molWt[x].doubleValue(); 

anstatt zu versuchen: java.lang.Integer kann nicht auf java.lang.Double

public Double calcData(Number[] molWt, Double[] dist, String unk) { 
     Double y2,y1, newY = null; 
     Double x1,x2; 

     Double unkn = Double.parseDouble(unk.toString()); 
     Double prev=0d; 
     Double slope; 


     for (int x = 0; x < dist.length; x++) 
      if (unkn > prev && unkn < dist[x]) { 
       y2 = (double) molWt[x]; 
       y1 = (double) molWt[x - 1]; 

       x2 = dist[x]; 
       x1 = dist[x - 1]; 

       slope = ((y2 - y1)/(x2 - x1)); 

       newY = slope * (unkn - x1) + y1; 


      } else { 
       prev = dist[x]; 
      } 

     return newY; 
    } 
+0

Nun, klar 'molWt' hat mindestens eine 'Integer' drin. Ist das eine Überraschung? Was ist deine eigentliche Frage? – Radiodef

+3

Ich kann nicht sehen, warum Sie 'Nummer' überhaupt verwenden. Beide Arrays sollten "double []" sein. Meiner Meinung nach ist "Number" völlig nutzlos. –

+2

Follow-up um einen Kommentar von @PaulBoddington, warum verwenden Sie boxed 'Double' anstatt primitive' double'? Können sie "null" sein? Wenn dies der Fall ist, wird dein Code einen schrecklichen Tod sterben. – Andreas

Antwort

11

Verwendung Number.doubleValue() gegossen werden Besetzung. Number kann nicht in ein primitives double umgewandelt werden.

+1

Du schlägst mich um eine Sekunde - hoffe, es macht dir nichts aus, wenn ich den Link hinzufüge! – Kenney

1

Mit der java.lang.Number.doubleValue() -Methode können Sie eine Zahl in ein doppeltes Objekt umwandeln.

y2 = molWt [x] .doubleValue()

+3

Es macht keinen Sinn, eine Antwort zu posten, die nur eine andere dupliziert. – Radiodef

1

Double und Number sind Primitiven eingerahmt. Sie werden verwendet, um Primitive wie Objekte zu behandeln. Wenn Sie Primitive verwenden können, tun Sie dies auch. Sie sind viel kleiner Speicher und machen Sie Berechnungen viel schneller.

Wenn Sie in diesem Fall Number zu Double konvertieren möchten, müssten Sie zwei Umwandlungen durchführen. Eine, um die Integer zu einer int zu machen, und eine andere, um die int zu einer double zu machen.

y2 = (double) (int) molWt[x]; 

Eine andere Besetzung würde auch vom Compiler hinzugefügt werden. So machen Sie die äquivalent zu:

y2 = (Double) (double) (int) molWt[x]; 

Sie sollten jedoch nur Primitiven die ganze Art und Weise können Sie durch, weil diese Casting Ihre Leistung töten.