วิธีที่ได้รับการยอมรับมากที่สุดในการแปลง a boolean
เป็นint
in Java คืออะไร?
วิธีที่ได้รับการยอมรับมากที่สุดในการแปลง a boolean
เป็นint
in Java คืออะไร?
คำตอบ:
int myInt = myBoolean ? 1 : 0;
^^
PS: true = 1 และ false = 0
(foo && (!bar || baz)) ? 1 : 0
ใช่ในขณะที่ เห็นได้ชัดว่าถ้ามันเป็นเพียงตัวบ่งชี้ parens ไม่จำเป็นหรือเป็นที่ต้องการ
(boolean expression) ? 1 : 0;
จะเข้าใจได้ง่ายขึ้น ฉันคิดว่าmy
คำนำหน้าทำให้ดูเหมือนตัวแปร
foo && (!bar || baz) ? 1 : 0
จะเป็นข้อผิดพลาดทางไวยากรณ์ (ฉันรู้ว่ามันเป็นเวลา 6 ปี)
การใช้ผู้ประกอบการที่ประกอบไปด้วยเป็นวิธีที่ง่ายที่สุดมีประสิทธิภาพมากที่สุดและอ่านง่ายที่สุดในการทำสิ่งที่คุณต้องการ ฉันแนะนำให้คุณใช้วิธีนี้
อย่างไรก็ตามฉันไม่สามารถต้านทานการเสนอทางเลือกที่ถูกประดิษฐ์ขึ้นมาไม่มีประสิทธิภาพและไม่สามารถอ่านได้
int boolToInt(Boolean b) {
return b.compareTo(false);
}
เฮ้คนชอบโหวตสำหรับคำตอบที่ยอดเยี่ยม!
แก้ไข
โดยวิธีการที่ฉันมักจะเห็นการแปลงจากบูลีนเพื่อ int เพื่อวัตถุประสงค์เพียงอย่างเดียวในการทำการเปรียบเทียบค่าทั้งสอง (โดยทั่วไปในการใช้compareTo
วิธีการ) Boolean#compareTo
เป็นวิธีที่จะไปในกรณีเฉพาะเหล่านั้น
แก้ไข 2
Java 7 แนะนำฟังก์ชั่นยูทิลิตี้ใหม่ที่ทำงานกับประเภทดั้งเดิมโดยตรงBoolean#compare
(ขอบคุณshmosel )
int boolToInt(boolean b) {
return Boolean.compare(b, false);
}
Boolean.compare()
และหลีกเลี่ยงการล็อกอัตโนมัติ 2. เอกสารสำหรับBoolean.compareTo()
ไม่ได้บอกว่ามันจะคืนค่า 1 เพียง "ค่าบวกถ้าวัตถุนี้แสดงถึงความจริงและอาร์กิวเมนต์เป็นเท็จ"
boolean b = ....;
int i = -("false".indexOf("" + b));
5 - b.toString().length
public int boolToInt(boolean b) {
return b ? 1 : 0;
}
ง่าย
import org.apache.commons.lang3.BooleanUtils;
boolean x = true;
int y= BooleanUtils.toInteger(x);
BooleanUtils.toInteger
return bool ? 1 : 0;
ขึ้นอยู่กับสถานการณ์ บ่อยครั้งวิธีที่ง่ายที่สุดดีที่สุดเพราะเข้าใจง่าย:
if (something) {
otherThing = 1;
} else {
otherThing = 0;
}
หรือ
int otherThing = something ? 1 : 0;
แต่บางครั้งมันก็มีประโยชน์ในการใช้ Enum แทนที่จะเป็นธงบูลีน ให้จินตนาการว่ามีกระบวนการแบบซิงโครนัสและแบบอะซิงโครนัส:
Process process = Process.SYNCHRONOUS;
System.out.println(process.getCode());
ใน Java, enum สามารถมีคุณสมบัติและวิธีการเพิ่มเติม:
public enum Process {
SYNCHRONOUS (0),
ASYNCHRONOUS (1);
private int code;
private Process (int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
?:
เป็นคือคุณสามารถใส่จุดพักภายในบล็อก if
ถ้าคุณใช้Apache Commons Lang (ซึ่งฉันคิดว่ามีโปรเจ็กต์มากมายที่ใช้) คุณสามารถใช้มันได้ดังนี้:
int myInt = BooleanUtils.toInteger(boolean_expression);
toInteger
เมธอดส่งคืน 1 ถ้าboolean_expression
เป็นจริงมิฉะนั้นเป็น 0
BooleanUtils.toInteger
return bool ? 1 : 0;
หากtrue -> 1
และfalse -> 0
การทำแผนที่เป็นสิ่งที่คุณต้องการคุณสามารถทำได้:
boolean b = true;
int i = b ? 1 : 0; // assigns 1 to i.
หากคุณต้องการทำให้งงงวยใช้สิ่งนี้:
System.out.println( 1 & Boolean.hashCode( true ) >> 1 ); // 1
System.out.println( 1 & Boolean.hashCode( false ) >> 1 ); // 0
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
Boolean.compare(myBoolean, false)
จะพอดีกับคำอธิบายที่ยกมาดีกว่า
ความจริงที่ว่าฉันต้องเขียนวิธีการ wrapper รอบคำสั่ง if สำหรับการหล่อค่าเพียงเพิ่มรายการใหญ่เหตุผลแล้วทำไม java ควรตายแล้ว และการเห็นผู้ประกอบการที่ไม่ได้ห่อหุ้มฟังก์ชั่น แต่เพียงแค่คัดลอกวางทุกที่ที่ฉันเห็นนักแสดงบูลีนเพื่อ int เพียงแค่ขับรถฉันถั่ว มันเป็นการสิ้นเปลือง cpu cycles และดูถูกการอ่านโค้ด
นอกจากนี้คำตอบส่วนใหญ่ที่นี่มี upvote หลายร้อยคำที่ไม่มีคำอธิบายซึ่งทำให้ฉันเดาได้ว่าการฝึกฝนที่ไม่ดีนั้นเป็นผลมาจากการสัมผัสจาวามาก ถ้าฉันเขียนโอเปอเรเตอร์สำหรับการหล่อบูลีนเป็นภาษาที่ทันสมัยฉันจะโดนไล่ออกในวันถัดไปจากงานที่ฉันมี ดังนั้นวันนี้ฉันเลิกพยายามใช้เหตุผลด้วยการมอบหมายจาวาของฉันและตัดสินใจยอมรับความโง่เขลา:
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;}
public static int convBool(boolean b)
{
int convBool = 0;
if(b) convBool = 1;
return convBool;
}
จากนั้นใช้:
convBool(aBool);
true
และfalse
ตามลำดับ