बूलियन को जावा में int में बदलें


350

जावा में a booleanको कन्वर्ट करने का सबसे स्वीकृत तरीका क्या है int?


8
क्या पूर्णांकों को आप क्रमशः trueऔर किसके अनुरूप माना जाएगा false?
थोरबजोरन रावन एंडरसन

4
कुछ भाषाओं में अंतर से बूलियन में निहितार्थ होता है। जावा नहीं करता है हालाँकि, आधिकारिक कार्यान्वयन में SQL पैकेज हैं, और मेरा मानना ​​है कि ये "झूठे" को 0. में बदल देते हैं
hpique

4
@ पेटर लॉरी नहीं यदि आप अन्य प्रणालियों के साथ हस्तक्षेप करना चाहते हैं जिनके पास गैर-संख्यात्मक डेटा प्रकार के रूप में बूलियन नहीं है।
hpique

6
@Peter लॉरी सवाल वास्तव में मूल्य मानचित्रण के बारे में नहीं है। यह रूपांतरण को सबसे स्पष्ट, स्वीकृत तरीके से करने के बारे में है।
hpique

7
तकनीकी रूप से, जावा कंपाइलर पहले से ही मैपिंग को परिभाषित करता है। सत्य और असत्य क्रमशः 1 और 0 में संकलित हैं।
एंटिमोनी

जवाबों:


583
int myInt = myBoolean ? 1 : 0;

^^

पीएस: सच = 1 और गलत = 0


59
मामले में जहां मायबूलियन एक बूलियन अभिव्यक्ति के लिए खड़ा है, कोष्ठक का उपयोग करना अधिक पठनीय है।
आरपी

40
हां, जैसा कि (foo && (!bar || baz)) ? 1 : 0। जाहिर है, अगर यह सिर्फ एक पहचानकर्ता है, तो परेंस आवश्यक या वांछनीय नहीं हैं।
12

बूलियन के साथ अच्छी चाल! मैं देख रहा था कि कुछ कास्टिंग मौजूद हैं (इंट) सच = 1, लेकिन नोटिंग इस तरह से मौजूद है: P
mumair

1
मेरे जैसे शुरुआती लोगों के लिए, (boolean expression) ? 1 : 0;अधिक समझने योग्य होगा। मुझे लगता है कि myउपसर्ग ने इसे एक चर की तरह बनाया।
दिक्सहोम

12
@ अपने उदाहरण में कोष्ठक एक चाहिए , पठनीयता की बात नहीं है। foo && (!bar || baz) ? 1 : 0एक वाक्यविन्यास त्रुटि होगी। (मुझे पता है कि यह 6 साल हो गया है)
कोनराड मोरावस्की


59

टर्नेरी ऑपरेटर का उपयोग करना सबसे सरल, सबसे कुशल और सबसे पठनीय तरीका है कि आप क्या चाहते हैं। मैं आपको इस समाधान का उपयोग करने के लिए प्रोत्साहित करता हूं।

हालाँकि, मैं एक विकल्प, विरोधाभासी, अक्षम, अपठनीय समाधान का प्रस्ताव करने के लिए विरोध नहीं कर सकता।

int boolToInt(Boolean b) {
    return b.compareTo(false);
}

अरे, ऐसे कूल जवाबों के लिए लोग वोट देना पसंद करते हैं!

संपादित करें

वैसे, मैंने अक्सर दो मूल्यों (आमतौर पर, compareToविधि के कार्यान्वयन में ) की तुलना करने के एकमात्र उद्देश्य के लिए एक बूलियन से एक इंट में रूपांतरण देखा । Boolean#compareToउन विशिष्ट मामलों में जाने का रास्ता है।

संपादित करें २

जावा 7 ने एक नया यूटिलिटी फंक्शन पेश किया, जो सीधे आदिम प्रकार के साथ काम करता है, Boolean#compare(धन्यवाद शमोसल )

int boolToInt(boolean b) {
    return Boolean.compare(b, false);
}

1
आधुनिक जेआईटी द्वारा इनलेट किया जाएगा, इसलिए जरूरी नहीं कि यह अक्षम हो। यह भी दस्तावेज है कि b.compareTo का उपयोग क्यों किया जा रहा है, इसलिए यह पठनीय है।
थोरबजोरन रावन एंडरसन

2
यह धीमा हो सकता है क्योंकि हमें एक वस्तु में आदिम मूल्य को बॉक्स करने की आवश्यकता है। टर्नरी ऑपरेटर विधि रूपांतरण के बिना सीधे आदिम मूल्यों के साथ काम करती है, इसलिए मुझे लगता है कि यह अधिक कुशल है।
बृजक

5
1. आप Boolean.compare()ऑटोबॉक्सिंग का उपयोग और इससे बच सकते हैं । 2. प्रलेखन Boolean.compareTo()यह नहीं कहता है कि यह 1 लौटेगा, केवल "एक सकारात्मक मूल्य अगर यह वस्तु सत्य का प्रतिनिधित्व करती है और तर्क झूठ का प्रतिनिधित्व करता है"।
shmosel

1
मैंने सिर्फ 1,000,000 यादृच्छिक बूलियन मानों को परिवर्तित करने का एक परीक्षण किया और यह विधि टर्नरी ऑपरेटर के आधार पर लगातार तेज थी। यह लगभग 10ms मुंडा।
मैप्स

3
@AlexT। यदि आप माइक्रोबेनचर्च करते हैं तो आपको यह सुनिश्चित करने के लिए एक रूपरेखा का उपयोग करना चाहिए कि आप सही तरीके से मापते हैं। Openjdk.java.net/projects/code-tools/jmh देखें ।
थोरबजर्न रेवन एंडरसन

48
boolean b = ....; 
int i = -("false".indexOf("" + b));

14
मुझे लगता है कि यह टिप्पणी के रूप में बेहतर होगा, जवाब नहीं।
hpique

164
5 - b.toString().length
kennytm

5
@ ThorbjørnRavnAndersen हाँ। दूसरे में से एक का उपयोग करना, अधिक कुशल, पोस्ट किए गए तरीके जिन्हें उस ओवरहेड की आवश्यकता नहीं है। जब तक आप यह समझा नहीं सकते कि किसी बूलियन के मूल्य की जांच करने के लिए स्ट्रिंग ऑब्जेक्ट्स का निर्माण करना किसी भी तरह से कुशल है।
b1nary.atr0phy

10
@ ThorbjørnRavnAndersen मेरा इस पर कोई नियंत्रण नहीं है कि मेरे तरीकों का उपयोग कैसे किया जाता है या उन्हें कितनी बार कहा जाता है, जो पूरी तरह से बिंदु है। आप प्रदर्शन और पठनीयता दोनों को बिल्कुल मूर्त लाभ के लिए त्याग रहे हैं।
b1nary.atr0phy

6
यह निश्चित रूप से रचनात्मक है, लेकिन मैं इस पद्धति का उपयोग करने के लिए एक भी लाभ के बारे में नहीं सोच सकता। यह अधिक क्रियात्मक है, और (मैं अनुमान लगा रहा हूं) कम कुशल है, लेकिन यह सुनिश्चित करना एक दिलचस्प तरीका है।
माइक बैक्सटर


24
import org.apache.commons.lang3.BooleanUtils;
boolean x = true;   
int y= BooleanUtils.toInteger(x);

FWIW, BooleanUtils.toIntegerबस के रूप में लागू किया गया है return bool ? 1 : 0;
सुलैमान ऊको

अपाचे कॉमन्स उपयोगी हो सकते हैं, लेकिन यह सिर्फ हास्यास्पद है।
एरिक डुमिनील

14

वह स्थिति पर निर्भर करता है। अक्सर सबसे सरल दृष्टिकोण सबसे अच्छा है क्योंकि यह समझना आसान है:

if (something) {
    otherThing = 1;
} else {
    otherThing = 0;
}

या

int otherThing = something ? 1 : 0;

लेकिन कभी-कभी बूलियन ध्वज के बजाय एनम का उपयोग करना उपयोगी होता है। मान लें कि तुल्यकालिक और अतुल्यकालिक प्रक्रियाएं हैं:

Process process = Process.SYNCHRONOUS;
System.out.println(process.getCode());

जावा में, enum में अतिरिक्त विशेषताएँ और विधियाँ हो सकती हैं:

public enum Process {

    SYNCHRONOUS (0),
    ASYNCHRONOUS (1);

    private int code;
    private Process (int code) {
        this.code = code;
    }

    public int getCode() {
        return code;
    }
}

6
एक का उपयोग करने के बजाय अगर ?:आप ब्लॉक के अंदर विराम बिंदु डाल सकते हैं कि एक अतिरिक्त कारण है ।
थोरबजोरन रावन एंडरसन

12

यदि आप अपाचे कॉमन्स लैंग का उपयोग करते हैं (जो मुझे लगता है कि बहुत सारे प्रोजेक्ट इसका उपयोग करते हैं), तो आप इसे इस तरह से उपयोग कर सकते हैं:

int myInt = BooleanUtils.toInteger(boolean_expression); 

toIntegerविधि 1 boolean_expressionसही है, तो 0, अन्यथा


FWIW, BooleanUtils.toIntegerबस के रूप में लागू किया गया है return bool ? 1 : 0;
सोलोमन उको

8

यदि आप चाहते हैं कि मैपिंग true -> 1और false -> 0मैपिंग आप कर सकते हैं:

boolean b = true;
int i = b ? 1 : 0; // assigns 1 to i.


3

के साथ चाल खेलते हैं Boolean.compare(boolean, boolean)। फ़ंक्शन का डिफ़ॉल्ट व्यवहार: यदि दोनों मान समान हैं, तो यह 0अन्यथा वापस आता है -1

public int valueOf(Boolean flag) {
   return Boolean.compare(flag, Boolean.TRUE) + 1;
}

स्पष्टीकरण : हम Boolean.compare के डिफ़ॉल्ट वापसी जानते हैं -1 है तो +1 कर रिटर्न मान पर गलत मैच के मामले में 0 के लिए Falseऔर 1 के लिएTrue


3
Boolean.compare(myBoolean, false)उद्धृत वर्णन करने के लिए बेहतर accorning फिट
वादज़्मी

@Vadzim Yes वास्तव में झूठे की तुलना करके 1 और 0 उत्पन्न करेगा और वर्तमान परिदृश्य में यह 0 और -1 उत्पन्न करेगा। दोनों समाधान ठीक हैं और आपकी टिप्पणी के लिए +1 :-)
मुमैयर

0

तथ्य यह है कि मुझे मान रखने के लिए एक स्टेटमेंट के चारों ओर एक आवरण विधि लिखनी है, सिर्फ पहले ही कारणों की एक बड़ी सूची में जोड़ देता है कि जावा को पहले से ही क्यों मरना चाहिए। और टर्नरी ऑपरेटर को एक फंक्शन में लपेटे हुए भी नहीं देखा गया, लेकिन हर जगह कॉपी पेस्ट किया गया था। यह सीपीयू चक्रों की बर्बादी है और कोड पठनीयता का अपमान है।

यहां भी अधिकांश उत्तरों में शून्य स्पष्टीकरण के साथ सैकड़ों उत्थान हैं, जो मुझे अनुमान लगाते हैं कि बुरा अभ्यास सिर्फ इतना जावा के संपर्क में होने का एक परिणाम है। अगर मैंने किसी भी आधुनिक भाषा में इंट्री करने के लिए बूलियन कास्टिंग के लिए एक टर्नरी ऑपरेटर लिखा है तो मुझे अगले दिन जो भी नौकरी मिलेगी उससे निकाल दिया जाएगा। इसलिए आज मैंने अपने जावा असाइनमेंट के साथ नियोजन की कोशिश करना छोड़ दिया है और मूर्खता को अपनाने का फैसला किया है:

public static int booltoint(boolean nonsense) {
                                // Let's start with indenting using spaces, 16 of them to be precise
                                String[] ____int = new String[500];
                                ____int[0] = Boolean.toString(nonsense);
                                try {
                                                Thread.sleep(100); 
                                } catch (Exception e) {    }
                                Random rand = new Random();
                                int n = rand.nextInt((int)1e9);
                                int result = 0;
                                int other_Result = 1;
                                for (int i = -5; i < 2; i++) {
                                                try {
                                                                if (n == 35467247) return 5; // let's just fail with one in a billion chance
                                                                if ((5 - ____int[i].length()) == 1) {
                                                                                return ++result;
                                                                } else if(____int[i] == "false") {
                                                                                return --other_Result;
                                                                }
                                                } catch (Exception e) {
                                                                // This method will throw an exception 5 times every single time I 
                                                                // cast a boolean to int before returning an integer
                                                }
                                }
                                return (int)1e35;}

-1
public static int convBool(boolean b)
{
int convBool = 0;
if(b) convBool = 1;
return convBool;
}

फिर उपयोग करें:

convBool(aBool);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.