論理演算子 つづき |
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
じゃあ、
ざっと説明が終わったところで
論理演算子の使い方を詳しく
見ていこう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
論理演算子は
他の論理演算子や比較演算子、
()括弧の優先順位などと組み合わせて、
様々な判定が出来るんだ。
例えば
「A で、かつ B」で、
かつ
「C または D」
みたいな判定もできるよ。
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
あんま
条件多いと
分かるづらく
けどね。 |
 |
|
 |
どんな
条件式でも
できそうだね。 |
|
|
|
|
|
 |
|
|
|
|
 |
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
「勇者攻撃力が
500以上で かつ 1000以下」で、
かつ
「魔法石が7個 または 魔法薬を5個
持っている場合」、
超必殺技発動!
みたいなこともできるんだ! |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
おー、
じゃあ、その内容で
例のコードを作ってみよう。
こんな感じかな。
新しいプロジェクトを作って
書き写してくれ。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
「KotoTest5」な。
ゆっくり読んでね。 |
|
複雑ー |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
うわー、
条件式だらけー。
なんか、
括弧が多くない? |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
論理演算子 複数条件例(KotoTest5のKNMain.java)17行目~ |
・・・ |
|
|
|
017 |
|
public static void
main(String[] args) { |
|
018 |
|
// TODO code
application logic here |
|
019 |
|
|
|
020 |
|
int
yuushaAttack = 0;//勇者攻撃力
0に初期化 |
|
021 |
|
int
magicGem = 0;//魔法石 0に初期化 |
|
022 |
|
int
magicPotion = 5;//魔法薬 5に初期化 |
|
023 |
|
|
|
024 |
|
//もし勇者攻撃力が 500以上 で 1000以下 で、 かつ |
|
025 |
|
//魔法石が 7個 または 魔法薬を 5個 なら |
|
026 |
|
if((yuushaAttack
>= 500 && yuushaAttack <= 1000) && |
|
027 |
|
(magicGem == 7 ||
magicPotion == 5)){ |
|
028 |
|
//超必殺技発動メッセージを表示 |
|
029 |
|
System.out.println("超必殺技発動!!!"); |
|
030 |
|
} |
|
031 |
|
|
|
032 |
|
System.out.println("全処理終わり"); |
|
033 |
|
|
|
・・・ |
|
} |
|
|
黄色の部分が追加・改変部分です。
書き写して下さい。 |
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
これは
()括弧を使うことで、判定の
優先順位を変えてるんだよ。
通常、&&演算子と||演算子を
一緒に使った場合は、
&&演算子が先に評価される。
判定する順番で結果が変わる
から注意しよう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
そっか、
掛け算、割り算が
足し算、引き算より
先に計算されるのと同じ
だね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
括弧で
優先順位が
変わるのは
共通だな。 |
 |
|
|
かっこ付けないと
結果が
変わっちゃう場合が
あるんだ。 |
|
|
|
 |
|
 |
|
論理演算子 複数条件の優先順位例(括弧有り) |
・・・ |
|
|
|
020 |
|
int
yuushaAttack = 0;//勇者攻撃力
0に初期化 |
|
021 |
|
int
magicGem = 0;//魔法石 0に初期化 |
|
022 |
|
int
magicPotion = 5;//魔法薬 5に初期化 |
|
023 |
|
|
|
024 |
|
//もし勇者攻撃力が 500以上 で 1000以下 で、 かつ |
|
025 |
|
//魔法石が7個 または 魔法薬を5個 なら |
|
026 |
|
if((yuushaAttack >=
500 && yuushaAttack <= 1000)&& |
|
027 |
|
(magicGem
== 7 || magicPotion == 5)){ |
|
028 |
|
//超必殺技発動メッセージを表示 |
|
029 |
|
System.out.println("超必殺技発動!!!"); |
|
030 |
|
} |
|
・・・ |
|
|
|
|
括弧を書いた場合、
括弧が優先的に評価され、条件式が以下のように解釈される。 |
条件式の内容 |
勇者攻撃力が 500以上 で 1000以下 |
かつ |
魔法石が7個 または 魔法薬を5個 |
|
|
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
うーん、やっぱり
勇者攻撃力が0だから
魔法薬が5個でも実行
されないね。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
「且つ」だから、
両方満たして
ないと。 |
|
|
|
 |
実行結果(出力ウィンドウ) |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
じゃあ、
次に括弧を取ったのに
書き換えて実行してみよう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
 |
|
 |
|
論理演算子 複数条件例(KotoTest5のKNMain.java)17行目~ 括弧削除 |
・・・ |
|
|
|
017 |
|
public static void
main(String[] args) { |
|
018 |
|
// TODO code
application logic here |
|
019 |
|
|
|
020 |
|
int
yuushaAttack = 0;//勇者攻撃力
0に初期化 |
|
021 |
|
int
magicGem = 0;//魔法石 0に初期化 |
|
022 |
|
int
magicPotion = 5;//魔法薬 5に初期化 |
|
023 |
|
|
|
024 |
|
//もし勇者攻撃力が 500以上 で 1000以下 で、 かつ |
|
025 |
|
//魔法石が 7個 または 魔法薬を 5個 なら |
|
026 |
|
if((yuushaAttack
>= 500 && yuushaAttack <= 1000) && |
|
027 |
|
(magicGem == 7 ||
magicPotion == 5)){ |
|
028 |
|
//超必殺技発動メッセージを表示 |
|
029 |
|
System.out.println("超必殺技発動!!!"); |
|
030 |
|
} |
|
031 |
|
|
|
032 |
|
System.out.println("全処理終わり"); |
|
033 |
|
|
|
・・・ |
|
} |
|
|
黄色の部分を削除して実行して下さい。 |
|
|
 |
|
 |
|
|
 |
実行結果(出力ウィンドウ) |
|
|
magicGemの
条件式が&&に
くっついちゃう。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
ほら、結果が全く違うだろ。
さっきは実行されなかった値で
実行されちゃったよな。
括弧を外すと&&演算子が
優先されて条件が作られる。
条件の意味が全く
変わっちゃってるだろ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
ほんとだ、全然違う!
たった魔法薬5個だけで
超必殺技が出せちゃうんだ。
|
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
連発
できるねー |
|
|
|
 |
|
 |
|
論理演算子 複数条件の優先順位例(括弧なし) |
・・・ |
|
|
|
020 |
|
int
yuushaAttack = 0;//勇者攻撃力
0に初期化 |
|
021 |
|
int
magicGem = 0;//魔法石 0に初期化 |
|
022 |
|
int
magicPotion = 5;//魔法薬 5に初期化 |
|
023 |
|
|
|
024 |
|
//もし勇者攻撃力が 500以上 で 1000以下 で、 かつ |
|
025 |
|
//魔法石が 7個 または 魔法薬を 5個 なら |
|
026 |
|
if(yuushaAttack
>= 500 && yuushaAttack <= 1000 && |
|
027 |
|
magicGem
== 7 ||
magicPotion == 5){ |
|
028 |
|
//超必殺技発動メッセージを表示 |
|
029 |
|
System.out.println("超必殺技発動!!!"); |
|
030 |
|
} |
|
・・・ |
|
|
|
|
括弧を書かなかった場合、
&&演算子が優先的に評価され、条件式が以下のように解釈される。 |
条件式の内容 |
勇者攻撃力が 500以上 で 1000以下 で 魔法石が 7個 |
または |
魔法薬が 5個 |
|
|
|
|
|
|
 |
|
 |
|
|
自分の思うような
結果にならない場合
括弧をつけて明確に
してみよう。
つけても
問題ないし。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
&&演算子と||演算子を
一緒に使う場合は
判定の優先順番
が分かりづらくなる。
自分の実行したい順番に
条件式に()括弧を付ける
様にしよう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
これも計算と同じで、
分かりやすいように
括弧をつけてもいいんだね。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
うーん、
難しいね。 |
|
|
 |
|
 |
|
演算子の結合順位 |
|
優先順位
(上ほど高い) |
種類 |
1 |
! 論理演算子 |
2 |
算術演算子(計算) |
3 |
比較演算子(比較) |
4 |
&& 論理演算子 |
5 |
|| 論理演算子 |
|
|
|
|
|
 |
|
 |
|
 |
|
|
|
 |
|
|
|
|
 |
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
これが条件式で演算子を
使った場合の評価の順番だ。
1.計算 2.比較 3.&& 4.||
って感じ。
結果に影響が出るから気を
つけよう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
これから何回も
やるから大丈夫。 |
 |
|
|
かっこ付けないと
結果が変わっちゃう
場合があるって
覚えとこ。 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
あのさっ、論理演算子で
条件式をいくつ
つなげてもいいの?
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
ああ、
条件式はいくらでも
つなげて評価できるよ。
まあ、分かりづらく
ならない程度にしとけ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
もー、
いつもあばうと。。 |
 |
|
|
例のコードは
4つか。
まあ、2~4個
ぐらいじゃね? |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
yuushaAttack、
magicGem 、
magicPotion ・・・
変数もいっしょに
いくつ使ってもいい
んだね。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
攻撃力とアイテム
組み合わせて
判定することも
できるんだ |
|
複雑に
なるけどねー
|
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
ああ、
何個でも使って
条件判定出来るよ。
変数の型が違っていても、
一緒に使えるよ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
論理演算子 複数条件例 |
・・・ |
|
|
|
|
|
//もしyuushaAttack が 500以上 で 1000以下 で、 かつ |
|
|
|
//魔法石が7個 または 魔法薬を5個 なら |
|
|
|
if((yuushaAttack >=
500 &&
yuushaAttack <= 1000)&& |
|
|
|
(magicGem
== 7 ||
magicPotion
== 5)){ |
|
|
|
//超必殺技発動メッセージを表示 |
|
|
|
System.out.println("超必殺技発動!!!"); |
|
|
|
} |
|
・・・ |
|
|
|
|
変数を複数使える |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
これらはさっきのテストの
条件判定を
・ifを入れ子にして2つにするか
・論理演算子で1つにまとめるか
とかと同じで、
何が一番良いって訳じゃない。
使う場所で臨機応変に
使い分けよう。
まあ、これも慣れだけどね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
 |
おー、
たーりーんー
わかつたねー |
|
おー、
なーぽん、
わーかつたーおー |
 |
|
|
|
ム~ |
 |
|
|
いえいえい |
|
|
|
|
|
 |
|
 |
|
論理演算子のまとめ(処理) |
|
論理演算子の処理の内容 |
複数の条件式を同時に使える(いくつでもつなげられる) |
論理演算子の評価には優先順位がある |
&&演算子と||演算子を一緒に使った場合は、&&演算子が
先に評価される |
他の論理演算子や比較演算子と組み合わせて使える |
()括弧で判定の優先順位を変えられる |
条件式の判定する順番で結果が変わる |
変数もいっしょにいくつでも使える |
|
|
|
|
 |
|
 |
|
|
 |
|
 |
|
論理演算子のまとめ(命令) |
|
&&演算子 |
全ての条件式 が true の場合 ブロック内 が 実行される |
日本語で言えば「~かつ」の意味
英語で言えば「AND」の意味 |
|
||演算子 |
どれかの条件式 が true の場合 ブロック内 が 実行される |
日本語で言えば「~または」の意味
英語で言えば「OR」の意味 |
|
!演算子 |
条件式 が
false の場合 ブロック内 が 実行される |
日本語で言えば「~以外」の意味 |
|
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
でも、いつの間にか
コードがすごい
増えてきたねー。
自分でも
なんとなくでも
分かるのが
信じられないー。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
でも難しい~。
もっと
がんばらないと。 |
|
覚えることより
考えることの方が
増えてきたからな。
ゆっくり読もう。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
パッと見だと、頭痛くなるけどな。
部分部分で読んでいけば
理解できるだろ。
小さなものの積み重ねだ。
こんなの慣れ、慣れ。
これから経験してけば大丈夫だよ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
あんま気張るなよ。
今よく分かんないでも
これから繰り返し使ってくうちに
いつの間にか分かるように
なってるから。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
お前
よくやってるよ。
着実に進んでる。 |
 |
|
|
ほんとに?
もしかして
なぽちゃんに
ほめられた!?
うれしー! |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
今はなんとなく分かればOK。
誰でも最初からできるわけ
じゃないからね。
演算子は条件の判定に
重要だってことを覚えておいて
随時見直してくれ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
い、いや・・・
ちょっと
喜びすぎじゃね。 |
 |
|
|
やった、
なぽちゃんに
ほめられたー!
やった!やった! |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
じゃあ、まとめだ。
比較演算子や
論理演算子を
使ったテストをしよう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
あー、
もう勝手にして・・・
なんか
ムカつくけど。 |
 |
|
|
やった、やった
ほめられたー!
なぽちゃんにー
ほめられたー!
|
|
|