
条件のしくみ
これまでのコードは1文ずつ順序よく処理が行われていました。しかし、「場合に応じた処理」を行うことができます。
ゲームのスコアが良かったら・・・→ボーナスステージに行く
ゲームのスコアが悪かったら・・・→もう一度挑戦する
上記のようにJavaでも、さまざまな状況をあらわすために条件という概念を用います。
例えば、「よいスコアである」という条件を考えてみると、条件がtrueまたはfalseになる場合は次のようになります。
スコアが80点以上だった場合 → 良いスコアで条件はtrue
スコアが80点未満だった場合 → 良いスコアでない条件はfalse
条件を記述する
条件をつくるために使う>記号などは、関係演算子と呼びます。>の場合は「右辺より左辺が大きい場合にtrue」となるので、3>1はtrueとなります。1>3はfalseになります。
- 演算子 式がtrueとなる場合
- == 右辺が左辺に等しい
- != 右辺が左辺に等しくない
- > 右辺より左辺が大きい
- >= 右辺より左辺が大きいか等しい
- < 右辺より左辺が小さい
- <= 右辺より左辺が小さいか等しい
関係演算子を使う
- 5>3 この条件の評価はtrueです
- 5<3 この条件の評価はfalseです
- a==6 この条件の評価は変数aの値によって異なる
- a!=6 この条件の評価は変数aの値によって異なる
「a==6」という条件は、変数aの値が6であった場合にtrueになります。一方、変数aの値が3や10であった場合はfalseになります。
if文のしくみ
if(良いスコアをとった) ボーナスステージに行く
if文を記述することによって、条件(「良いスコアをとった」)がtrueであった場合に、「ボーナスステージに行く」という処理を行うのです。悪いスコアだった場合には「ボーナスステージに行く」処理は行いません。実際にコードを入力してみましょう。


条件res==1がtrueであれば17行目の処理がされます。ユーザーが1以外の文字を入力したらどうなるでしょうか?res==1がfalseになるため17行目は処理されません。
したがって実行画面の10を入力したときのようになります。
ブロックにしないと?
if文では、条件がtrueのとき、複数の文を処理することもできます。このためには、{}でブロックをつくり、複数の文をまとめます。
しかし、ブロックにせず実行するとどうなるでしょうか?


if文にブロックがないため、コンパイラは、if文の内容は①だけであると解釈してしまったのです。
if~else文のしくみを知る
さらにif文のバリエーションとして、条件がfalseの場合に、指示した文を処理する構文もあります。これがif~else文です。


ユーザーが1と10を入力した場合の、2とおりの画面を示します。
if~else if~elseのしくみを知る
2つ以上の条件を判断させて処理するバリエーションです。


1を入力した場合、最初の条件はtrueになるので、①が処理される。
2を入力した場合、最初の条件がfalseとなるので今度は②が処理される。
これ以外の場合(2つの条件が共にfalseの場合)、必ず③が処理される。
if~else if~elseを使うと、複数の条件に応じた処理を行うことができます。
switch文のしくみを知る
switch文では、文内の式がcaseの後の値と一致すれば、そのあとの文から「break」までの文を処理します。どれにも当てはまらない場合は「default:」以下の文を処理します。「default:」は省略することも可能です。
下記のコードを見てくださいswitch文を使うと、if~else if~elseを簡単に記述できる場合があります。

いくつかの注意点があります。Sample5_05_5からbreak文を省いてみましょう。
実行画面を確認すると、1が入力されました。2が入力されました。1か2を入力してください。とおかしな出力となっています。

そもそもbreakという文は、文の流れを強制的に切るという役割です。
正しい位置にbreak文を入れるようにしましょう。