বুলিয়ান জাভাতে রূপান্তর করুন


350

জাভাতে booleanকোনও রূপান্তর করার সবচেয়ে গ্রহণযোগ্য উপায় কী int?


8
আপনি কোন সংখ্যার সাথে যথাক্রমে trueএবং তার সাথে সম্পর্কিত বলে মনে করবেন false?
থরবজর্ন রাভন অ্যান্ডারসন

4
কিছু ভাষায় অন্তর্নির্মিত থেকে বুলিয়ানতে অন্তর্নিহিত রূপান্তর রয়েছে। জাভা হয় না। তবে, সরকারী বাস্তবায়নের এসকিউএল প্যাকেজ রয়েছে এবং আমি বিশ্বাস করি যে এগুলি "মিথ্যা" কে 0 এ রূপান্তরিত করে
hpique

4
@ পিটার লরিকে আপনি যদি এমন অন্যান্য সিস্টেমের সাথে আন্তঃসংযোগ স্থাপন করতে চান তবে যেগুলি নন-ডেটা টাইপ হিসাবে বুলিয়ান নেই।
hpique

6
@ পিটার লরে প্রশ্নটি মান মানচিত্রের বিষয়ে আসলেই নয়। এটি কীভাবে রূপান্তরটি সবচেয়ে স্পষ্ট, স্বীকৃত উপায়ে করবেন about
এইচপিক

7
প্রযুক্তিগতভাবে, জাভা সংকলক ইতিমধ্যে একটি ম্যাপিং সংজ্ঞায়িত করে। সত্য এবং মিথ্যা যথাক্রমে 1 এবং 0 তে সংকলিত হয়।
এন্টিমোনি

উত্তর:


583
int myInt = myBoolean ? 1 : 0;

^^

পিএস: সত্য = 1 এবং মিথ্যা = 0


59
যে ক্ষেত্রে মাইবুলিয়ান বুলিয়ান এক্সপ্রেশন হিসাবে দাঁড়িয়েছে, বন্ধনী ব্যবহার করা আরও পঠনযোগ্য।
আরএসপি

40
হ্যাঁ, হিসাবে (foo && (!bar || baz)) ? 1 : 0। স্পষ্টতই, যদি এটি কেবল সনাক্তকারী হয় তবে প্যারেনগুলি প্রয়োজনীয় বা পছন্দসই নয়।
ব্লারফ্লায়

বুলিয়ান সঙ্গে দুর্দান্ত কৌশল! আমি
দেখছিলাম

1
আমার মত নতুনদের জন্য, (boolean expression) ? 1 : 0;আরও বোধগম্য হবে। আমার মনে হয় myউপসর্গটি এটিকে পরিবর্তনশীলের মতো দেখায়।
dixhom

12
আপনার উদাহরণের ব্লাডএফএল বন্ধনীগুলি আবশ্যক , পাঠযোগ্যতার বিষয় নয়। foo && (!bar || baz) ? 1 : 0একটি সিনট্যাক্স ত্রুটি হবে। (আমি জানি 6 বছর
কেটে গেছে


59

টার্নারি অপারেটরটি ব্যবহার করা আপনার পছন্দমতো করার সবচেয়ে সহজ, সবচেয়ে দক্ষ এবং সবচেয়ে পঠনযোগ্য উপায়। আমি আপনাকে এই সমাধানটি ব্যবহার করতে উত্সাহিত করি।

তবে, আমি বিকল্প, স্বীকৃত, অদক্ষ, অপঠনযোগ্য সমাধানের প্রস্তাব দিতে বাধা দিতে পারি না।

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

আরে, লোকেরা এ জাতীয় শীতল উত্তরের পক্ষে ভোট দিতে পছন্দ করে!

সম্পাদন করা

যাইহোক, আমি প্রায়শই দুটি মূল্যবোধের (সাধারণত compareToপদ্ধতি প্রয়োগের ক্ষেত্রে ) তুলনা করার একক উদ্দেশ্যে একটি বুলিয়ান থেকে একটি আইটেমে রূপান্তর দেখেছি । Boolean#compareToসেই নির্দিষ্ট ক্ষেত্রে যাওয়ার উপায়।

সম্পাদনা 2

জাভা 7 একটি নতুন ইউটিলিটি ফাংশন চালু করেছে যা আদিম ধরণের সাথে সরাসরি কাজ করে, Boolean#compare(ধন্যবাদ শমোসেল )

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

1
আধুনিক জেআইটি'র মাধ্যমে অন্তর্ভুক্ত হবে, তাই অদক্ষভাবে অদক্ষ নয়। এছাড়াও এটি ডকুমেন্ট করে যে b.compareTo কেন ব্যবহারযোগ্য তাই এটি পাঠযোগ্য able
থরবজর্ন রাভন অ্যান্ডারসন

2
এটি ধীর হতে পারে কারণ আমাদের কোনও বস্তুর মধ্যে আদিম মানটি বাক্স করা দরকার। টার্নারি অপারেটর পদ্ধতিটি রূপান্তর ছাড়াই সরাসরি আদিম মানগুলির সাথে কাজ করে, তাই আমি মনে করি এটি আরও কার্যকর।
বরজাক

5
1. আপনি Boolean.compare()অটোবক্সিং ব্যবহার এবং এড়াতে পারেন । ২. এর জন্য ডকুমেন্টেশনগুলি Boolean.compareTo()বলে না যে এটি 1 টি ফিরে আসবে, কেবল "যদি এই বস্তুটি সত্য উপস্থাপন করে এবং যুক্তিটি মিথ্যা উপস্থাপন করে তবে একটি ধনাত্মক মান"।
shmosel

1
আমি কেবল 1,000,000 র্যান্ডম বুলিয়ান মানগুলিতে রূপান্তর করার জন্য একটি পরীক্ষা করেছি এবং এই পদ্ধতিটি টার্নারি অপারেটরের ভিত্তিতে নিয়মিতভাবে দ্রুত ছিল। এটি প্রায় 10 মিম শেভ করে।
ম্যাপসি

3
@AlexT। আপনি যদি মাইক্রোব্যাঙ্কমার্ক করেন তবে আপনার সঠিকভাবে পরিমাপ করা উচিত তা নিশ্চিত করার জন্য আপনার একটি কাঠামো ব্যবহার করা উচিত। Openjdk.java.net/projects/code-tools/jmh দেখুন ।
থোরবজর্ন রাভন অ্যান্ডারসন

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

14
আমি মনে করি এটি উত্তর হিসাবে নয়, কমেন্ট হিসাবে আরও ভাল উপযুক্ত হবে।
এইচপিফিক

164
5 - b.toString().length
কেনেটিএম

5
@ থোরবজরন রাভানআন্দেরসেন হ্যাঁ। অন্যগুলির মধ্যে একটি, আরও কার্যকরী, এমন পোস্ট ব্যবহার করা হচ্ছে যাতে সেই ওভারহেডের প্রয়োজন হয় না। আপনি যদি না ব্যাখ্যা করতে পারেন তবে স্ট্যান্ডিং অবজেক্টগুলি কীভাবে কেবল বুলিয়ানটির মান পরীক্ষা করতে হয় তা কোনওভাবেই দক্ষ।
b1nary.atr0phy

10
@ থরবজর্নআরভান অ্যান্ডারসেন আমার পদ্ধতিগুলি কীভাবে ব্যবহার করা হয় বা কত ঘন ঘন তাদের ডাকা হয় তার পুরো নিয়ন্ত্রণই রাখার উপর আমার কোনও নিয়ন্ত্রণ নেই। আপনি একেবারেই কোনও স্পষ্ট লাভের জন্য কর্মক্ষমতা এবং পঠনযোগ্যতা উভয়ই ত্যাগ করছেন।
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());

জাভাতে, এনামের অতিরিক্ত বৈশিষ্ট্য এবং পদ্ধতি থাকতে পারে:

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পদ্ধতিটি boolean_expressionসত্য হলে 1 প্রদান করে , অন্যথায় 0 করে 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;
}

ব্যাখ্যা : যেহেতু আমরা জানি যে বুলিয়ান ডট কমকে ডিফল্ট রিটার্ন -1 -র সাথে ভুল-মিল হয় তাই +1 এর সাথে রিটার্নের মান তৈরি করে 0 জন্য Falseএবং 1 জন্যTrue


3
Boolean.compare(myBoolean, false)উদ্ধৃত বর্ণনার সাথে আরও ভালভাবে শোনাতে পারে
ভাদজিম

@ ভাদজিম হ্যাঁ প্রকৃতপক্ষে মিথ্যাটির সাথে তুলনা করে 1 এবং 0 উত্পন্ন করবে এবং বর্তমান পরিস্থিতিতে এটি 0 এবং -1 উত্পন্ন করবে। উভয় সমাধানই আপনার মন্তব্যের জন্য ভাল এবং +1 :-)
মুমায়ার

0

একটি মান ingালার জন্য যদি আইএফ-এর বিবৃতিতে আমাকে প্রায় একটি মোড়ক পদ্ধতি লিখতে হয় তা এই যে ইতিমধ্যে জাভাটি ইতিমধ্যে মারা যাওয়ার কারণগুলির বিশাল তালিকাটি যুক্ত করে। এবং টার্নারি অপারেটরটি দেখে এমনকি কোনও ফাংশনেও জড়িয়ে নেই তবে কেবল যেখানেই আটকানো হয়েছে অনুলিপিটি দেখতে পেয়েছি বুলিয়ান কাস্ট দেখি কেবল আমাকে বাদাম চালায়। এটি সিপিইউ চক্রের অপচয় এবং কোড পাঠযোগ্যতার অপমান।

এছাড়াও এখানে বেশিরভাগ উত্তরের শূন্য ব্যাখ্যা সহ শত শত উত্সাহ রয়েছে, যা আমাকে অনুমান করে যে খারাপ অভ্যাসটি কেবল জাভায় এতটা উন্মুক্ত হওয়ার ফলস্বরূপ। আমি যদি কোনও আধুনিক ভাষায় বুলিয়ান কাস্ট করার জন্য কোনও টার্নারি অপারেটর লিখি তবে পরের দিন আমার যে চাকরিই হোক না কেন থেকে আমি বরখাস্ত হয়ে যাব। সুতরাং আজ আমি আমার জাভা কার্যভারগুলির সাথে যুক্তি ব্যবহার করার চেষ্টা ছেড়ে দিয়েছি এবং বোকামির আলিঙ্গনের সিদ্ধান্ত নিয়েছি:

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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.