dポイントプレゼントキャンペーン実施中!

お世話になります。

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になるので
処理は行われないのでは?と思うのですが…。

この辺の理解ができなくて、教えて頂きたく思います。
宜しくお願いします。

A 回答 (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しか入れられない変数です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/08 09:43

>もし、if (n != -1)のブロック内に入らなければhitはfalseのままではないのでしょうか?


その通りです。

(! hit) は、hit の値を自体を変更しません。
反転した値をif の条件として使用しているだけです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/08 09:44

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)となり、
その処理は行われますね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/08 09:44

追記



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

・宣言時にhit=falseにしています。


・forループ中に、一度でもnが-1以外になったら、hit=trueになります。
・if文でhitがfalseだったら文字を表示します。
・値を返して終了です。

> falseのまま、if (! hit)のブロックにきたらhitはtrueになるので
ifの条件文がtrueになるので、処理が行われます。
hitに代入をしていないので、hit自体に変化はありません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/08 09:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!