2016-04-11 15 views
5

मैं अपने प्रोजेक्ट के लिए कुछ गणना गणना करने के लिए कर रहे हैं प्रकार संख्या और double के दो सरणी क्रमशः कोशिश कर रहा हूँ और मैं के लिए
y2= (double) molWt[x];प्रकार एक संख्या कास्टिंग दोगुना करने के लिए

molWt और distjava.lang.ClassCastException निम्नलिखित मिलता है।

java.lang.ClassCastException: java.lang.Integer में ढाला नहीं जा सकता 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

अच्छी तरह से 'molwt' में कम से कम एक' इंटीजर' है। क्या यह एक आश्चर्य है? आपका वास्तविक सवाल क्या है? – Radiodef

+3

मैं नहीं देख सकता कि आप 'नंबर' का उपयोग क्यों कर रहे हैं। दोनों सरणी 'डबल [] 'होना चाहिए। मेरी राय में, 'संख्या' पूरी तरह से बेकार है। –

+2

@PaulBoddington द्वारा टिप्पणी करने के लिए अनुवर्ती, आप प्राचीन 'डबल' के बजाय बॉक्स किए गए' डबल 'का उपयोग क्यों कर रहे हैं? क्या वे 'शून्य' हो सकते हैं? यदि ऐसा है, तो आपका कोड एक भयानक मौत मर जाएगा। – Andreas

उत्तर

11

उपयोग Number.doubleValue():

y2 = molWt[x].doubleValue(); 

के बजाय की कोशिश कर रहा डाली। Number को आदिम double पर नहीं डाला जा सकता है।

+1

आपने मुझे एक सेकंड तक मार दिया - उम्मीद है कि आपको लिंक जोड़ने में कोई फर्क नहीं पड़ता! – Kenney

1

आप एक संख्या को डबल ऑब्जेक्ट में डालने के लिए java.lang.Number.doubleValue() विधि का उपयोग कर सकते हैं।

y2 = molWt [x] .doubleValue()

+3

कोई उत्तर पोस्ट करने में कोई बात नहीं है जो केवल दूसरे को डुप्लिकेट करता है। – Radiodef

1

Double और Number बॉक्सिंग कर रहे हैं पुरातन। उनका उपयोग किया जाता है ताकि हम वस्तुओं जैसे प्राइमेटिव का इलाज कर सकें। यदि आप प्राइमेटिव का उपयोग कर सकते हैं तो ऐसा करें। वे बहुत छोटी स्मृति के अनुसार हैं और आपको गणना बहुत तेजी से बनाते हैं।

इस मामले में, यदि आप Number से Double को परिवर्तित करना चाहते हैं तो आपको दो जानवरों को करना होगा। एक Integer को int में बनाने के लिए, और को double में बनाने के लिए।

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

कंपाइलर द्वारा एक और कलाकार भी जोड़ा जाएगा। उपर्युक्त समकक्ष बनाना:

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

हालांकि आपको केवल पूरे माध्यम से प्राइमेटिव का उपयोग करना चाहिए, क्योंकि यह कास्टिंग आपके प्रदर्शन को मार देगा।

संबंधित मुद्दे