Bir dönüştürmek için en kabul yolu nedir boolean
bir etmek int
Java?
Bir dönüştürmek için en kabul yolu nedir boolean
bir etmek int
Java?
Yanıtlar:
int myInt = myBoolean ? 1 : 0;
^^
PS: true = 1 ve false = 0
(foo && (!bar || baz)) ? 1 : 0
. Açıkçası, eğer sadece bir tanımlayıcı ise, parenler gerekli veya arzu edilmez.
(boolean expression) ? 1 : 0;
için daha anlaşılır olurdu. Bence my
önek bir değişken gibi görünüyordu.
foo && (!bar || baz) ? 1 : 0
sözdizimi hatası olur. (6 yıl olduğunu biliyorum)
Üçlü operatörü kullanmak, istediğiniz şeyi yapmanın en basit, en verimli ve en okunabilir yoludur. Bu çözümü kullanmanızı öneririm.
Ancak, alternatif, tutarlı, verimsiz, okunamayan bir çözüm önermeye dayanamıyorum.
int boolToInt(Boolean b) {
return b.compareTo(false);
}
Hey, insanlar böyle havalı cevaplara oy vermek ister!
Düzenle
Bu arada, genellikle iki değerin (genellikle compareTo
yöntem uygulamalarında ) karşılaştırılması amacıyla bir boole'den int'e dönüşümler gördüm . Boolean#compareTo
bu özel durumlarda gitmenin yolu.
Düzenle 2
Java 7 doğrudan ilkel tiplerle çalışan yeni bir yardımcı program işlevi sundu Boolean#compare
(Teşekkürler shmosel )
int boolToInt(boolean b) {
return Boolean.compare(b, false);
}
Boolean.compare()
Otomatik boksu kullanabilir ve bunlardan kaçınabilirsiniz. 2. için dokümantasyon Boolean.compareTo()
1 döndüreceğini söylemez, sadece "bu nesne true değerini temsil ediyorsa ve argüman false değerini temsil ediyorsa pozitif bir değerdir".
boolean b = ....;
int i = -("false".indexOf("" + b));
5 - b.toString().length
import org.apache.commons.lang3.BooleanUtils;
boolean x = true;
int y= BooleanUtils.toInteger(x);
BooleanUtils.toInteger
tam olarak uygulanmaktadır return bool ? 1 : 0;
.
Bu duruma bağlıdır. Genellikle en basit yaklaşım en iyisidir çünkü anlaşılması kolaydır:
if (something) {
otherThing = 1;
} else {
otherThing = 0;
}
veya
int otherThing = something ? 1 : 0;
Ancak bazen boolean bayrağı yerine bir Enum kullanmak yararlı olur. Senkronize ve senkronize olmayan süreçler olduğunu hayal edelim:
Process process = Process.SYNCHRONOUS;
System.out.println(process.getCode());
Java'da enum'un ek özellikleri ve yöntemleri olabilir:
public enum Process {
SYNCHRONOUS (0),
ASYNCHRONOUS (1);
private int code;
private Process (int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
?:
if bloklarının içine kesme noktaları koyabilmenizdir.
Eğer kullanırsanız Apache Commons Lang (Ben projelerde bir sürü kullanmak düşünüyorum), sadece bu gibi kullanabilirsiniz:
int myInt = BooleanUtils.toInteger(boolean_expression);
toInteger
yöntem boolean_expression
doğruysa 1 , aksi takdirde 0 döndürür
BooleanUtils.toInteger
tam olarak uygulanmaktadır return bool ? 1 : 0;
.
Gizlemek istiyorsanız, şunu kullanın:
System.out.println( 1 & Boolean.hashCode( true ) >> 1 ); // 1
System.out.println( 1 & Boolean.hashCode( false ) >> 1 ); // 0
İle hile oynayalım Boolean.compare(boolean, boolean)
. Fonksiyonun varsayılan davranışı: her iki değer de eşitse, 0
aksi takdirde döner -1
.
public int valueOf(Boolean flag) {
return Boolean.compare(flag, Boolean.TRUE) + 1;
}
Açıklama : Bildiğimiz gibi, yanlış eşleşme durumunda Boolean.compare öğesinin varsayılan getirisi -1'dir, bu nedenle +1 dönüş değerini 0 için False
ve 1 içinTrue
Boolean.compare(myBoolean, false)
alıntı açıklamaya göre daha uygun
Bir değer dökümü için bir if ifadesinin etrafına bir sarmalayıcı yöntemi yazmak zorunda olduğum gerçeği, java'nın zaten ölmesi gereken nedenlerin zaten büyük listesine ekliyor. Üçlü operatörün bir fonksiyona sarılmadığını, ancak her yere yapıştırıldığını görmek, int'e bir boolean döküm görüyorum. İşlemci döngüsü kaybı ve kod okunabilirliği için hakaret.
Ayrıca, buradaki cevapların çoğunda sıfır açıklamalı yüzlerce oylama var, bu da kötü uygulamanın java'ya çok fazla maruz kalmanın bir sonucu olduğunu tahmin etmemi sağlıyor. Eğer herhangi bir modern dilde boole çevirmek için üçlü bir operatör yazsaydım, ertesi gün sahip olduğum işten kovulurdum. Bu yüzden bugün java görevlerimle akıl yürütmeye çalışmaktan vazgeçtim ve aptallığı kucaklamaya karar verdim:
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;}
true
vefalse
sırasıyla?