2012-11-08 9 views
21
Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange() 

उपयोगिताओं .getDistance डबल देता है और GetAttackRange int देता है। उपर्युक्त कोड एक कथन का हिस्सा है और इसे सत्य होने की आवश्यकता है। तो तुलना वैध है?क्या जावा में एक int के साथ डबल की तुलना करना वैध है?

धन्यवाद

+0

आप इसे की कोशिश की? काम किया? –

+0

यदि यह वैध है तो मैं परीक्षण कैसे कर सकता हूं। कंपाइलर इसे स्वीकार करता है लेकिन मुझे नहीं पता कि वास्तविक संख्यात्मक मूल्यों की वास्तव में तुलना की जाती है या नहीं। – Crone

+1

क्या आपने इसे स्वयं किया है ?? जावा कोड में एक साधारण परीक्षण पर्याप्त हो सकता था।उसी उत्तर के लिए मेरा उत्तर जांचें –

उत्तर

53

हाँ, यह वैध है - यह तुलना प्रदर्शन से पहले एक double को int को बढ़ावा देंगे।

JLS section 15.20.1 (Numerical Comparison Operators) देखें जो JLS section 5.6.2 (Binary Numeric Promotion) से लिंक करता है।

बाद से:

आदिम रूपांतरण का प्रसार करना (§5.1.2) कन्वर्ट करने के लिए लागू किया जाता है या दोनों ऑपरेंड के रूप में निम्नलिखित नियमों द्वारा निर्दिष्ट:

  • या तो संकार्य की है डबल टाइप करें, दूसरा डबल में परिवर्तित हो जाता है।

  • ...

2

यह ठीक होना चाहिए। फ़्लोटिंग पॉइंट ऑपरेशन/तुलना में, यदि एक तर्क फ़्लोटिंग/डबल है तो अन्य इंट को भी बढ़ावा दिया जाता है।

0

यह ठीक रहेगा।

जावा बस संख्यात्मक मूल्य का सही वापस आ जाएगी बराबर है:

int n = 10; 
    double f = 10.0; 
    System.out.println(f==n); 

कोड ऊपर सच प्रिंट करता है।

+1

आपको' == 'ऑपरेटर के साथ फ़्लोटिंग-पॉइंट मानों की तुलना करने से सावधान रहना चाहिए (और आमतौर पर भी बचें)। –

+0

और आप इन 2 मानों की तुलना किसके साथ करना चाहते हैं? – Flawyte

+0

सभी 'int '' डबल' के रूप में बिल्कुल प्रतिनिधित्व योग्य हैं। –

5

दो अलग-अलग संख्यात्मक प्रकारों के साथ संचालन (तुलना सहित) निष्पादित करते समय, जावा एक अंतर्निहित चौड़ा रूपांतरण करेगा। इसका अर्थ यह है कि जब आप double की तुलना int के साथ करते हैं, तो int को double में परिवर्तित किया जाता है ताकि जावा मूल्यों की तुलना दो double s के रूप में कर सके। तो संक्षिप्त जवाब हाँ है, एक int और एक डबल की तुलना एक चेतावनी के साथ मान्य है।

समस्या यह है कि आप क्योंकि परिशुद्धता में संभावित त्रुटियों की ==, <=, या >= ऑपरेटर्स का उपयोग समानता के लिए दो चल piont मूल्यों की तुलना नहीं करनी चाहिए कि। साथ ही, आपको उन विशेष मूल्यों के बारे में सावधान रहना होगा जो डबल ले सकते हैं: NaN, POSITIVE_INFINITY, और NEGATIVE_INFINITY। मैं दृढ़ता से सुझाव देता हूं कि आप कुछ शोध करें और double एस की तुलना करते समय इन समस्याओं के बारे में जानें।

+0

मजेदार बात यह है कि यह मेरे प्रोफेसर कोड है। लेकिन हाँ, अब मैं इस विषय की जांच करूंगा – Crone

+0

@ क्रोन स्कूल के असाइनमेंट के लिए, आप शायद इन एज मामलों को अनदेखा कर सकते हैं, लेकिन आपको अभी भी उनके बारे में पता होना चाहिए। उन्हें अनदेखा करना चुनना पूर्ण अज्ञानता से प्राथमिकता से है। –

+0

मुझे 'int' के विरुद्ध' <=' or '> = 'के साथ' डबल' की तुलना करने में कुछ भी गलत नहीं दिख रहा है। केवल सटीक समानता संदिग्ध हो सकती है। –

1

हाँ यह बिल्कुल वैध पूर्णांक डेटाप्रकार और डबल डेटाप्रकार तुलना है ..

int i =10; 
double j= 10.0; 
if (i==j) 
{ 
System.out.println("IT IS TRUE"); 
} 
संबंधित मुद्दे