Javaの条件分岐や繰り返し処理といった、プログラミングに必須な論理の組み方を学ぶ　5/25

真偽値と条件式
①真偽値とは
・真偽値という新しい値を学びます
・真偽値には「true」と「false」という2つの値しか存在しません
・trueは真（正しい）、falseは偽（間違っている）を意味します
・真偽値のデータ型はboolean型です
・true, falseにはダブルクォーテーションは付けないことに注意しましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/94ba1869-6326-cf48-75ed-9d7d6ac64cb3.png)
②比較演算子とは
・比較演算子とは、値を比較するための記号で、比較した結果は真偽値（trueかfalse）になります
・x == y」はxとyが同じかどうかを比較し、同じであればtrue、違っていればfalseとなります
・また「x != y」はその逆になります
※代入の「=」と比較の「==」を混同しないように注意してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/cdfb614d-3ea2-20cb-1912-c65bbe5b1564.png)
③真偽値を出力しよう
・真偽値も出力することができます
・ただし、trueやfalseはダブルクォーテーションで囲んではいけません。注意しましょう
・比較演算子の結果は真偽値になり、コンソールにも真偽値が出力されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/d06799c4-71c7-5c68-46d1-4f26c85d95a3.png)
--------------------------------------------------------------------------------------------
比較演算子（２）
①大小比較
・<, >という記号は数学でも用いる大小比較の記号です
・x < yはxがyより小さければtrue, 大きければfalseを返します
・x > yはその逆になります
・また数学で同様に用いる≦, ≧という記号（以上や以下を表します）は、<=, >=と記述します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/a477a062-e938-66fe-786d-8913c818c966.png)
--------------------------------------------------------------------------------------------
論理演算子
①かつ
・論理演算子は「かつ」「または」「~でない」を表現する記号です。
・まずは「かつ」について見てみましょう
・「かつ」は&&で表現し、「条件1 && 条件2」は「条件1がtrueかつ条件2もtrue」であれば結果もtrueになり、どちらか一方でもfalseであれば結果はfalseになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/616059c4-703d-cc59-f821-70351151de19.png)
②または
・「または」は||で表現し、「条件1 || 条件2」は、「条件1または条件2のどちらか一方でもtrue」であれば結果はtrueになります
※具体例を下図で確認してみましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/0f06de8f-0081-a595-6101-e2d3d3071d6b.png)
③〜でない
・!を用いると、「〜でない」を表現できます
・例えば、!(x >= 30)は「xが30以上でない（つまり30より小さい）」ときtrueになり、「xが30以上」のときfalseになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/e0dbcfd6-3673-9869-89ae-c914ba7c9041.png)
④論理演算子のまとめ
・論理演算子で重要な2つの例を、下図の単純な出力で見比べてみましょう
・&&は、どちらもtrueでなければ全体の結果はtrueになりませんが、||は、どちらか一方でもtrueであれば全体の結果もtrueになります
・このことをしっかり覚えておけば、論理演算子は怖くありません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/ad47643a-58e1-0e6e-0962-8b50ec893189.png)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
条件分岐
①条件分岐とは
・プログラミングでは、「特定の状況のときだけある処理を行う」ということがよくあります
・このようなプログラムを条件分岐といいます
　　例えば日常生活でも「雨だったら、傘をもっていく」という条件分岐を行いますよね。条件分岐はプログラミングで必須の知識なので使いこなせるようになりましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/13500394-dd52-5c24-06b1-14463071e3c8.png)
②if文
・最もよく使う条件分岐はif文です
・ifは英語で「もし〜なら」という意味です
・この「〜」に当たる部分が、ifの後の()の部分です。これを条件式と呼びます
・条件式がtrueなら{}内の処理を行い、反対に条件式がfalseなら何もしません。まずはif文の()に条件式を入れ、{}の中に処理を書く、ということを覚えましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/a220ca43-5b4c-9616-84d4-bb8699cbeecc.png)
③if文を使ってみよう
・if文の実際の使い方を見てみましょう
・ここまでで学んだ、真偽値、比較演算子（==, < など）、論理演算子（&&, ||, ! ）が、条件式で活躍します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/c0f0d153-ebca-e14e-e415-240124dd58f2.png)
雨
もし今日雨なら、傘を使おう　条件がtrueの場合、実行される
もし今日晴れなら、傘は使わない　条件がfalseの場合、実行されない
④ブロック
・if文で{ }という記号を使っています
・詳しくはまだ知らなくて大丈夫ですが、これをブロックと呼び、複数の処理をまとめたいときに使うというぐらいに覚えておきましょう
・if文では、条件がtrueのときに行う処理を、ブロックを使ってまとめています。
※なお{ }の後ろにはセミコロンは不要です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/73ae33f9-1db3-e922-b309-a64ac1f9a25a.png)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
else, else if
①else
・elseとは英語で「そのほかの」というような意味です
・ifとelseを組み合わせると、「もし〜なら◯◯、そうでなければ△△」という条件分岐が可能になります
・ifとelseを使った構文は下図になります。{ }の位置などしっかり覚えましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/d91d03f3-afb8-4880-ffa0-696dd9e938fb.png)
②else if
・if文ではelse ifを用いて、さらなる条件分岐が可能です
・ifとelse if、elseを組み合わせると、「もし〜なら◯◯、そうではなくてもし××なら△△、どちらでもない場合は□□」という条件分岐を実現できます。下図の2つの例で、それぞれどの処理が実行されるのか確認しておきましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/6beedc82-aa5b-f15d-7bf1-931c36a0a334.png)
③実行される処理
・else ifは必要なだけ並べることができますが、複数の条件に合致しても、実行されるのは最初に合致した条件だけなので注意しましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/93e0ec33-0585-298f-cf11-e51be8fe3af4.png)
--------------------------------------------------------------------------------------------
switch文
①switch文
・条件分岐にはswitch文という構文もあります
・switch文は下図のように記述し、条件の値がcaseの値と一致するとき、処理が実行されます
・switch文は構文が少し複雑です
※caseの後ろのコロン（:）などは忘れがちなので注意しましょう。breakについては後述します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/7b916ef0-f29a-e3c9-91c3-467b419976cd.png)
②if文とswitch文
・switch文の具体例をif文と比較して見てみましょう
・下の図では、変数nの値がcaseの値1と一致しているので、「大吉です」と出力されます
・これは、if文の条件式の中で n == 1 としているのと似ています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/03671f97-5465-f839-ef51-26e8e45b0121.png)
③break
・switch文ではbreakが非常に重要です
・breakとはswitch文を終了する命令です
・breakがないと、合致したcaseの処理を行った後、その次のcaseの処理も実行してしまいます
※意図せぬ処理が起こってしまいますので、switch文を使うときにはbreakを忘れないように気をつけましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/636bba4b-992b-75c8-91c3-ecc2eee2b945.png)
-------------------------------------------------------------------------------------------
switch文（２）
①default
・switch文では、どのcaseとも一致しなかったときに実行する処理を、defaultに指定することができます
・これはif文のelseに似ています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/b803ee19-22e4-1b42-710f-f3e654ef606a.png)
②インデント
・条件分岐から離れ、インデントについて学習しましょう
・インデントとは日本語で「字下げ」を意味します
・きれいにインデントするとコードが見やすくなります
・下図を見てみましょう
・インデントを入れることでどこまでがどのcaseに対応するか一目で分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/5f6045a5-1cdd-f10d-422e-103cb25ba173.png)
--------------------------------------------------------------------------------------------
while文
①繰り返し処理
・繰り返し処理とは、一定の処理を自動で繰り返し行う処理のことです
・たとえば、1~100までの数字をコンソールに出力したい場合、下図のようにSystem.out.println()を100回書くのは面倒です。こういった処理を自動化するのが繰り返し処理です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/ab5d79f1-e496-0ca2-c34d-d960e936888d.png)
②while文
・繰り返し処理の代表的なものにwhile文というのがあります
・whileとは「〜の間」という意味の英語です
・while文は下図のように書き、「条件がtrueの間、{ }内の処理を繰り返す」ことができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/2b9f34ba-aac0-af06-9562-b4b1a278b8fc.png)
③while文の処理の流れ
・下図で、繰り返し処理の流れを見てみましょう
・まずwhile文の前で変数の初期化を行います
・この変数は、while文を繰り返すかどうか判断するために用います
・処理が一周終わると、その度に変数は更新され、再び条件式がチェックされます
・trueであればもう一周処理を行い、falseであれば繰り返しが終了します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/7decddd0-8631-5378-8a89-efef3c53fc45.png)
④while文を使ってみよう
・while文の具体例を見てみましょう
・下図はにんじゃわんこが5回ジャンプを繰り返すプログラムです
・まずはwhile文の外で変数を用意し、ジャンプをする度にその変数に1を足していきます
・そうすると6回目の繰り返しでwhileの条件がfalseになり、繰り返し処理が終了します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/c426b582-e76a-c4b1-b47e-8b8a44b8d8f5.png)
⑤無限ループ
・先ほどのwhile文で最後に変数iに1を足し忘れると変数iは1のまま変わらず、条件が永遠にtrueになってしまうので、繰り返し処理が無限に行われてしまいます（無限ループ）
・無限ループはコンピュータに異常な負荷をかけることになるので、確実に阻止しなければなりません
・繰り返し処理では、必ずどこかで条件がfalseになるように実装しましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/8b693d05-0203-9a41-ae8a-518d2a9622f0.png)
--------------------------------------------------------------------------------------------
for文
①for文
・for文も繰り返し処理の1つです
・for文では、forの後の()内に、「変数の初期化、条件式、変数の更新」の3つを記述します
・それぞれはセミコロン（;）で区切りますが、
　　※最後の変数の更新にはセミコロン（;）をつけないことに注意してください
・while文と比較して覚えてしまいましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/3f5749f7-6730-2a92-3da9-38d81bbdab2a.png)
②for文を使ってみよう
・前回学習した、にんじゃわんこが5回ジャンプするwhile文の例を、for文で書きかえてみましょう
・繰り返し処理は、while文・for文どちらでも実装できますが、for文の方がすっきりと書けることが多いです
・どちらでも記述できるようにしておきましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/45676be6-303a-49a1-e040-58c2c540495f.png)
--------------------------------------------------------------------------------------------
break, continue
①break
・繰り返し処理を終了するためには、条件をfalseにする以外に、breakを使って強制的に終了させる方法があります
・下図のようにif文などの条件分岐と組み合わせることで、任意の箇所で繰り返し処理を終了させることができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/20f8b0ba-5005-3aa9-1beb-5c59f68434db.png)
②continue
・繰り返し処理を終了するbreakと違い、continueはその周の処理だけをスキップして、次の周を実行することができます
・continueもif文などと組み合わせて利用するのが一般的です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/a6f3ae92-9a98-2399-1a70-a289426c7314.png)
--------------------------------------------------------------------------------------------
配列を使ってみよう
①配列とは
・配列とは、変数のセットのようなものです
・変数が1つしか値を扱えないのに対し、配列は複数の値をまとめていれておくことができます
・配列は仕切りのある箱のようなもので、それぞれのスペースに値が入っています
・配列に入っているそれぞれの値のことを要素と呼びます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/ce00114b-41bc-96f7-913c-7a208264f2d1.png)
②配列の変数定義
・配列を扱う場合には、配列型の変数に配列を代入します
・配列型は、「int型の要素を持つ配列型」「String型の要素を持つ配列型」という風に指定する必要があります
・int型の要素を持つ配列はint[], String型の要素を持つ配列はString[]と記述します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/4db479f9-21ec-70c1-fe93-0da8fb6ec64f.png)
③配列の作り方
・配列は{ }の中に、コンマ（,）で区切りながら値を書くことでつくることができます
・下図で配列型の変数に配列を代入しています
※[]と{}を混同しないように注意しましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/87dd1e51-97ba-3810-3f09-4f6c252c88b8.png)
④インデックス番号と要素の取得
・配列の要素には、前から順に「0, 1, 2・・・」と数字が割り振られています
・これをインデックス番号といいます
※インデックス番号は0から始まる点に注意してください
・配列の各要素は、配列名[インデックス番号]とすることで取得することができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/f1ade0f7-2f68-97ba-4158-7000890c3390.png)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
配列の要素の上書き
①配列の要素を上書きする
・配列の各要素は変数のようなものです
・下図のように、特定の要素に値を代入することで、要素を上書きすることが可能です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/64c3e029-4af5-bbd3-3632-f8b80271583a.png)
②要素の上書きにおける注意点
・下図のように、配列では存在しない要素に値を代入することはできないので注意してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/706802c2-c586-1a91-811d-00b54c27739a.png)
-----------------------------------------------------------------------------------------
配列と繰り返し
①配列と繰り返し
・配列では、下図のように、それぞれの要素に対し同様の処理を行うことがしばしばあります
・これは先ほど学んだ繰り返し処理を用いることで容易に実現できます
・ここからは、配列に対して繰り返し処理を行う方法を見ていきましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/c18f3d15-9660-bbe1-f462-8a1bc665737a.png)
②配列とfor文
・配列namesの要素を全て出力するために、下の図のように書くのは非常に面倒です
・これをfor文で書いてみると右の図のようになります
・このようにすれば配列の要素の値を簡単に一覧表示できるようになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/d357a6ca-19bc-ebba-1276-12bf87e64102.png)
③length
・配列には、要素の数を数えるlengthという機能が備わっています
lengthは、「配列.length」のようにドット（.）でつないで用います
・lengthを用いれば、先ほどのfor文の条件式「i < 3」を下図のように書き換えることができ、配列の要素数を気にする必要がなくなります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/d28b5af7-4ee7-10e0-c410-24632115c535.png)
--------------------------------------------------------------------------------------------
配列用のfor文
①拡張for文の文法
・for文は配列用に特別な構文（拡張for文）を用意しています
・これを使えば、先ほどのfor文をよりシンプルに書くことができます
・拡張for文は下図のように記述します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/9c9c207d-371e-d3df-2fbd-6455d086635d.png)
②拡張for文のイメージ
・拡張for文では、配列の各要素の値を順に代入する変数を用意します
・具体例とイメージ図を見てみましょう
・下図の例では、繰り返しの度に、変数nameに配列namesの要素が順に代入されていきます
・また拡張for文では、自動的に要素の数だけ繰り返しが行われます
・2枚の図をしっかり覚えましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/ff524369-cc8e-b427-a127-abd8ed3259c0.png)
③普通のfor文との比較
・普通のfor文と比較し、拡張for文への書き換えができるようになりましょう
・普通のfor文ではインデックス番号を用いて配列の要素を取得しなければなりませんが、
・拡張for文では変数に配列の要素自体が代入されます
・拡張for文の方がシンプルに書けることが多いので覚えておきましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3438361/292d6142-4a0b-b533-83a6-3a3c400be5f5.png)