お世話になります。
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になるので
処理は行われないのでは?と思うのですが…。
この辺の理解ができなくて、教えて頂きたく思います。
宜しくお願いします。
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しか入れられない変数です。
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)となり、
その処理は行われますね。
No.2
- 回答日時:
追記
> if (n != -1)のブロックに
> 入った時は、hit=tureで下のif (! hit)の処理を行うのは分かるのですが…。
ifの条件文は「hitの否定」です。
hitがtrueのときは、条件文がfalseになるので、中の処理は行われません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- C言語・C++・C# ある線が円の範囲に入っているかの計算 1 2022/12/07 16:14
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで3秒だけ時間を止めたい
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
エクセルの当番表を作っていま...
-
どうしたら過去を忘れることが...
-
UWSCの終了の仕方
-
【VBA】全て空白のセルの列の非...
-
uwsc条件並列とそれの抜け方
-
乱数の桁数指定、または範囲指定。
-
スレッド起動したフォームを正...
-
ListBox 複数選択 で オートフ...
-
既存のBBSに返信機能の追加
-
エクセル関数で1〜12の数字がル...
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
vb.netです。2次元配列の要素を...
-
ウィーンブリッジ発進回路
-
Excel VBAで、アクティブシート...
-
ループ中にlabel_clickの読み...
-
VB2010でCSVファイルの読み込み
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングについて。 1つ...
-
画面を強制的に再描画させる方法
-
どなたかこのプログラミングを...
-
VBAでの一時停止と再開の方法
-
VBA for i=1 to lastrow
-
UWSCの終了の仕方
-
DoEventsが必要な理由について
-
エクセルの当番表を作っていま...
-
VBAで3秒だけ時間を止めたい
-
GIFアニメをループさせたくない
-
Escキーを押すと、中断する時と...
-
DOSコマンドのループ内のTIMEコ...
-
CSVファイルの特定の行だけを読...
-
アクティブセルから、A列最終行...
-
vb.netからエクセル関数書き込み
-
範囲指定したセルを1つずつ飛...
-
テキストボックスの名前に変数...
-
乱数の桁数指定、または範囲指定。
-
「偶数・奇数の和」のフローチ...
-
vbscriptでIE自動入力(途中で...
おすすめ情報