• ベストアンサー

booleanの意味・・・

お世話になります。 javaの勉強をし始めたばかりなのですが booleanの理解がなかなか出来なくて困っています。 例えば、 public ArrayList search(ArrayList blist, String word) { boolean hit = false; ArrayList setList = new ArrayList(); for (int i=0; i<blist.size(); i++) { Parson bean = (Parson) blist.get(i); int n =bean.getName().indexOf(word); if (n != -1) { setList.add(bean); hit = true; } } if (! hit) { System.out.println("その文字では検索できません!"); } return setList; } というプログラムで、booleanを使っていてif (n != -1)のブロックに 入った時は、hit=tureで下のif (! hit)の処理を行うのは分かるのですが…。 もし、if (n != -1)のブロック内に入らなければhitはfalseのままでは ないのでしょうか? falseのまま、if (! hit)のブロックにきたらhitはtrueになるので 処理は行われないのでは?と思うのですが…。 この辺の理解ができなくて、教えて頂きたく思います。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • bdr
  • ベストアンサー率43% (35/80)
回答No.5

javaはあまり詳しくないのですが、ご質問の処理ロジックは良く使用され、この場合ループ処理の結果を判断するための変数として使っています。 恐らく「boolean」の理解ができないというより、処理ロジックが理解できないのではないでしょうか? プログラム全体の流れは以下のとおりです (1)ループ開始前:false (2)ループ処理開始  (2-1)ループ内処理が条件にあった場合:true  (2-2)ループ内処理が条件に合わなかった場合:変更なし (3)ループ処理後  true:ループ中一回でも条件に合った場合  false:ループ中一度も条件に合わなかった場合 という全体の流れです。 つまり、for (int i=0; i<blist.size(); i++) {}のループの中で一度でも条件にあえば、条件にあった配列を返し、一度も条件にあわなかった場合は空のリストを返すと同時にエラーログを出すというものです。 ちなみに「boolean」はtrueかfalseしか入れられない変数です。

fa_fa0321
質問者

お礼

詳しい回答ありがとうございました!参考になりました★

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>もし、if (n != -1)のブロック内に入らなければhitはfalseのままではないのでしょうか? その通りです。 (! hit) は、hit の値を自体を変更しません。 反転した値をif の条件として使用しているだけです。

fa_fa0321
質問者

お礼

回答ありがとうございました!参考になりました★

すると、全ての回答が全文表示されます。
noname#19197
noname#19197
回答No.3

boolean の意味は、真偽です。 trueが真で falseが偽です。 これは、基本なのでしっかり理解して下さい。 また、演算の!は否定を表します。 !trueはfalseで、 !falseはtrueになります。 if文やwhile文の検証booleanで行われ、 判定がtrueの場合に、ステートメントが実行されます。 この例でいうと if (!hit)も if (hit != true)も if (hit == false)も 同じ意味です。 なので、hitは宣言時にfalseで初期化されていますので、 if (n != -1) ブロックに入らなければ、hitはfalseのままです。 なので、 if (! hit) の判定は、 if (!false)となり、 if (false == false)となり、 その処理は行われますね。

fa_fa0321
質問者

お礼

詳しい回答ありがとうございました!難しく考えていた様です…。

すると、全ての回答が全文表示されます。
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.2

追記 > if (n != -1)のブロックに > 入った時は、hit=tureで下のif (! hit)の処理を行うのは分かるのですが…。 ifの条件文は「hitの否定」です。 hitがtrueのときは、条件文がfalseになるので、中の処理は行われません。

すると、全ての回答が全文表示されます。
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.1

・宣言時にhit=falseにしています。 ・forループ中に、一度でもnが-1以外になったら、hit=trueになります。 ・if文でhitがfalseだったら文字を表示します。 ・値を返して終了です。 > falseのまま、if (! hit)のブロックにきたらhitはtrueになるので ifの条件文がtrueになるので、処理が行われます。 hitに代入をしていないので、hit自体に変化はありません。

fa_fa0321
質問者

お礼

詳しい回答ありがとうございました!参考になりました★

すると、全ての回答が全文表示されます。

関連するQ&A