2013-10-13 6 views
7

なぜコンパイラは私に言っている:booleanでswitch文が機能していませんか?

互換性のない型:

必須:ブール見つかり

のInt

ケースの下で0 &ケース1


例えば

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!"); 
    } 

}

ドライバクラス:エラーがはっきり状態として

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

あなた 'switch'と' if'は冗長です。 – SLaks

+0

私はそれがちょうど私が少なくともそれがどのように動作するかを見ることができることを知っている、私はこれを学んでいる –

+1

ブール値 - '真'、 '偽'、 'FILE_NOT_FOUND'! Javaでは、 'boolean'は2つの値、trueとfalseのみを持つことができます。あなたのデフォルトのケースには決して到達しません(そしてほとんどの人は 'if'ステートメントを使用するでしょう)。今では、 'ブール'(大文字の 'B 'に注意してください)は'ヌル 'になることができます("私は知らない "という意味です)が、ここでは使用していません... –

答えて

1

、数字はブール値ではありません。

あなたが望むtruefalseです。

11

booleanタイプをオンにしており、ケースにはintタイプが使用されています。しかし、あなたのケースをbooleanタイプに変更しても、それはうまくいかないでしょう。 booleanタイプを有効にすることはできません。

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

注全く"I don't know!"ケースがここに存在しないこと:if-elseを使用すると、とにかく容易になるだろうと、それはどんな意味がありません。 booleanタイプは、trueまたはfalseのいずれかの値を持つことができます。これが別の理由です。なぜswitch-casebooleanタイプではありません。デフォルトのケースはありません。

またを条件式を使用して、単一のステートメントにそれを凝縮することができます

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

私は'switch(isOn) 'の下で変更されましたFound:Boolean、必須:Char、Byte、shortまたはint –

+0

@someone' boolean'型ではなく 'int'型、' String'、または ' 'enum'型です。 –

+1

「true」を有効にすると、実際にはもっと見やすくなります。 Goはこれを常に使用しています。https://code.google.com/p/go-wiki/wiki/Switch#Missing_expression –

2

switch (isOn)booleanを切り替えてint例えば、case 0のケースにしたいです! switch (Expression) SwitchBlock用:JLS section 14.11によると

発現が唯一char, byte, short, int, Character, Byte, Short, Integer, String, or an enum type他の賢明なコンパイル時 エラーが発生することができます。

仕様以下によるのも事実である必要がありますされています

  1. switch文 に関連したすべてのcaseの定数式はスイッチ式のタイプに割り当て可能でなければなりません。
  2. ステートメントに関連付けられている定数式のうちのどれもが同じ値を持つことはありません。
  3. いいえswitchラベルはnullです。最大1つのデフォルトのラベルで
  4. は、二重またはbooleanフロート、することはできません式を切り替えて、

したがって、同じスイッチ 文に関連することができます。なぜですか?:ブール値true falseは、if-elseで使用すると意味があります。たとえば、if(true) then doです。浮動小数点数(float,double)は、正確な比較が丸め誤差によって壊れることが多いため、スイッチの候補とはなりません。例えば0.11 - 0.1 == 0.01はfalseです。

0

これはC++ではなく、1と0が暗黙的に真と偽に変換されます。ブール値をオンにすることは、たとえそれを行うことができたとしても時間の無駄です。単純なif/else文を書くか、? :構文を使用してください。

0

ただ、Javaでは1と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

このようなコードを書くことをお勧めしません。 – Raildex

0

の数にブール値を変換し、スイッチがブールでは動作しません。

受け入れ変数の型です: 文字、バイト、ショート、整数、文字列、文字、バイト、ショート、整数、列挙型

関連する問題