2013-10-13 18 views
7

neden derleyici beni anlatıyor:Boolean ile anahtar deyimi çalışmıyor mu?

Uyumsuz Türleri:

Gerekli: Boole

Bulunan: Int


case 0 & vaka altında Örneğin

:

public void test(boolean isOn){ 
    switch (isOn){ 
     case 0: 
      if (isOn){ 
       System.out.println("its on"); 
      } 
      break; 
     case 1: 
      if (!isOn){ 
       System.out.println("its off"); 
      } 
      break; 
     default: 
      System.out.println("I don't know!"); 
    } 

}

Sürücü Sınıfı: Hata açıkça belirttiği gibi

Club me = new Club(); 
me.test(true); 
+0

Kişisel' switch' ve:

Kabul değişken türleridir. – SLaks

+0

En azından onun nasıl çalıştığını görebildiğimi biliyorum, sadece bu –

+1

Boole değerlerini öğreniyorum - 'true', 'false', 'FILE_NOT_FOUND'! Java'da, bir 'boole' yalnızca iki değere sahip olabilir - doğru ve yanlış. Varsayılan durumunuza asla ulaşılamayacak (ve çoğu kişi bir "if" ifadesini kullanacaktır). Şimdi, 'Boolean' ('B' ') sermayesi' null 'olabilir (hangi noktada "Bilmiyorum" anlamındadır), ama bunu burada kullanmıyorsunuz ... –

cevap

1

, sayılar mantıksal ifadenin değildir.

true ve false.

11

Sen boolean türüne geçiş, ve olgular int türleri kullanıyor. Ancak, vakalarınızı boolean türüne sahip olmanıza rağmen, bu işe yaramaz. boolean türünü açamazsınız. Ve bu daha kolay zaten olurdu bir if-else kullanma gibi anlamsız olacaktır:

if (isOn) { 
    System.out.println("its on"); 
} else { 
    System.out.println("its off"); 
} 

Not burada hiçbir "I don't know!" vaka olduğuna. Bir boolean türü, true veya false değerine sahip olabilir. Bu başka neden, neden switch-caseboolean türü için değil. Varsayılan bir durum yoktur.

Ayrıca bir koşullu ifade kullanarak tek açıklamaya bunu yoğunlaşmasına olabilir:

public void test(boolean isOn) { 
    System.out.println(isOn ? "its on" : "its off"); 
} 
+0

"switch (isOn)" ifadesinin altında şu an bulunan değişiklikler: Boolean, Gerekli: Char, Byte, kısa veya int –

+0

@someone 'boolean' türünü açamazsınız, ancak yalnızca' int' türleri, 'String' veya enum türleri. –

+1

'' true'’u açmak aslında göründüğünüzden daha faydalıdır. Go her zaman bunu kullanır https://code.google.com/p/go-wiki/wiki/Switch#Missing_expression –

2

switch (isOn): boolean anahtarlama ve int örneğin case 0 ile harf istiyorum! JLS section 14.11 göre

: switch (Expression) SwitchBlock for a:

ekspresyonu sadece diğer char, byte, short, int, Character, Byte, Short, Integer, String, or an enum type olabilir akıllıca bir derleme hata oluşur. şartname aşağıdakilerden göre

doğru olması gerekir ayrıca şunlardır:

  1. bir switch deyimi ile ilişkili her durumda sabit ifade anahtarı İfade türüne atanabilir olmalıdır.
  2. anahtarıyla ilişkili case sabit ifadesinden ikisi de aynı değere sahip olmayabilir.
  3. numarası null'dir. En fazla bir varsayılan etiket anda
  4. çift ya boolean şamandıra, olamaz ifadesini geçiş

Dolayısıyla aynı anahtarı deyimi ile ilişkili olabilir. Soruyu cevaplamak için ?: boolean true falseif-else, ör. if(true) then do ile anlamlıdır. Kayan nokta sayıları (float, double), kesin karşılaştırma genellikle yuvarlama hataları nedeniyle kırıldığı için geçiş için iyi bir aday değildir. Örneğin. 0.11 - 0.1 == 0.01 yanlıştır.

0

Bu, C++ değil, burada 1 ve 0 dolaylı olarak doğruya ve false değerine dönüştürülür. Boolean'ı açmak da yapabilseniz bile zaman kaybıdır; Sadece basit bir if/else ifadesi yazın veya ? : yapısını kullanın.

0

Sadece Java'da 1 sayısı ve 0.

public void test(boolean isOn){ 
    int trueOrFalse; 
    if(isOn == true){ 
     trueOrFalse = 1; 
    }else{ 
     trueOrFalse = 0; 
    } 
    switch (trueOrFalse){ 
     case 1: 
      if (isOn){ 
       System.out.println("its on"); 
      } 
      break; 
     case 0: 
      if (!isOn){ 
       System.out.println("its off"); 
      } 
      break; 
     default: 
      System.out.println("I don't know!"); 
    } 
} 
+0

bu şekilde yazma kodunu teşvik etmeyin. – Raildex

0

için boolean dönüştürmek Anahtarı Boole çalışmak DEĞİLDİR. if` gereksizdir ` karakter, bayt, kısa, int, String, Karakter, Byte, Kısa, Tamsayı, enum

İlgili konular