2016-10-10 9 views
-2



シンプルなロジックが動作していないか、何か不足していますか?以下のクラスは、プリントアウトし、なぜ私は理解していない

私は出力があるべきと思った。

この行はfalseを出力しますので:

System.out.println((11 >= 1 || 11 <= 10) & (true == false)); 

この行も偽を出力する必要があります。

System.out.println(in1To10(11, false)); 

私はここで何が欠けていますか?ここにクラスがあります。

public class TestClass { 

    public static void main(String[] args) { 
     System.out.println(in1To10(11, false)); 

     System.out.println((11 >= 1 || 11 <= 10) & (true == false)); 

    } 

    public static boolean in1To10(int n, boolean outsideMode) { 
     if ((n >= 1 || n <= 10) & (outsideMode == false)) { 
      return true; 
     } 

     return false; 
    } 
} 
+0

あなたの期待と結果は同じです。 – tkausl

+1

「真の偽」を印刷し、それが印刷されることを期待しました。「真の偽」ですか?質問は何ですか? – Tunaki

+0

私は私の質問に賛成です。私の予想される出力はfalseです。false –

答えて

-1

のはin1to10でテストを分解してみましょう:

パラメータ:outsideMode = falseは、 n = 11;

  • (N> = 1 || N < = 10)=>(11> = 1 || 11 < = 10)=>(|| TRUE FALSE):=>
  • のでTRUE outsideMode == falseを:=> falseを==偽:=>そうTRUE
  • 最後に

public static boolean in1To10(int n, boolean outsideMode) { 
    if ((TRUE) & (TRUE)) { 
     return true; 
    } 

    return false; 
} 

:=> TRUEを返します!

+0

いいえ、Javaでは、ブール値trueは 'true'です。 「TRUE」ではありません。 – xenteros

+0

これは理にかなっています!それを分解していただきありがとうございます。 –

+0

ここでは、正確なJava構文やキーワードについては言及していませんが、ブール論理について説明しています。 – Zorglube

2

値が1〜10の範囲内にあるかどうかをテストしますか? の場合、変更(N> = 1 || N < = 10)厥(N> = 1 & & N < = 10)

1

がので、この行はまた、偽印刷する必要がある場合:System.out.println(in1To10(11, false));

いいえ、この行にはfalseを印刷しないでください。最初のパラメータ11は実際にn >= 1 || n <= 10の式を11 >= 1 || 11 <= 10に置き換えます。これは他の式と一致し、第2パラメータfalseoutsideMode == falsefalse == falseに、その他の式はtrue == falseとなります。 mainからの出力が偽であるtrue == falsefalseを生成するための比較false == falseは、trueを生成するためin1To10から出力trueある:二つの出力が異なる理由である

注:n110、包括の間であれば、あなたの式はチェックのその定められた目標と一致していません。これを達成するには、||&&に置き換える必要があります。

-1

これはtrueを返します。どうやって?

if ((n >= 1 || n <= 10) & (outsideMode == false)) { 
     return true; 
    } 

あなたは関数に11falseを渡しています。それが第一の条件内になると

それはn<=10をチェックしないようにn >= 1は、trueある11 >= 1を意味していることを確認します。再び、それは第二の条件をチェックし、あなたのoutsideModefalseあり、このようになります

(true) & (true)は、したがって、全体の条件がtrueなりをしてfuncitonはreturn trueをでしょう。再び第二の条件

(11 >= 1 || 11 <= 10) & (true == false) 

をそれはfalseを返します。どうやって?

11 >= 1はであり、再び11 <= 10をチェックせず、右側はfalseです。 したがって、条件はこのようになります。 true & falseこれはfalseになります。

+0

私は@Pirateだと思っていたが、それは偽を印刷していないthats。それは真実を印刷しています。 –

+0

関数からfalseを返すには?あなたの変更||関数の内部と内部ではfalseを返します。 – Pirate

+0

しかし、説明では、この行が偽になることを述べています。「条件はこのようになり、真偽は偽になります」。これはまだ正しいですか?説明では –

2
(     true     ) 
    (  true  ) & (  true  ) 
    (true || false ) & (  true  ) <--- false == false is true! 
if ((n >= 1 || n <= 10) & (outsideMode == false)) { 
    return true; 
} 

ルックはn >= 1ですか?はい、それはtrueです。 true v p <-> trueなので、Javaはそれ以上チェックしない。 true /\ true <-> trueですので、ifと入力してください。 return true;

あなたのコード平易な英語である:

if ((n is greater or equal to 1 OR smaller or equal 10) AND is the mode set to false) 
    return true 

あなたは数が1と10税込間にある場合、それはtrueを返したい場合、それは次のようになります。Javaである

if ((n is greater or equal to 1 AND smaller or equal 10) AND is the mode set to false) 
    return true 

if ((n >= 1 && n <= 10) && (outsideMode == false)) { 
    return true; 
} 

また、彼らは論理であるため&&||を使用することを忘れないでくださいブール値を扱う場合は、ビット演算子の代わりに|&の論理演算子を使用します。

+0

Javaが&演算子をチェックすることさえないので、私は参照してください? –

+0

です。 '||'演算子をチェックすることさえありません。それはあなたが選択肢を持っているからです。だから少なくとも一つの議論が真実であれば真です。 n> = 1が真であるので、真を返します。 – xenteros

+0

@ D.Ace私は自分の答えを編集しました。あなたがまだ何かを理解していない場合は、私があなたに与えた変更を試して、それがどのように動作するかを見てから、さらに質問してください。私はすぐに答えます – xenteros

1

私は、in1to10の機能では、(false == false)と比較していて、あなたが比較している(true == false)と勘違いしていたと思います。結果も同様です。お役に立てれば。

関連する問題