
今回は
というテーマでお送りします。


プログラムの幅が広がった気がしました。
今回も、ガッツリ勉強していきますよ~。
よろしくお願いします。

目次
【Youtube版】
Youtubeでもお伝えしていますので
是非チェックしてくださいね。
【1】3種類の if 構文

前回のお話で、条件分岐を考える時に
基本になる形を勉強しましたね。
まず、条件式があって true かfalseかを判定します。
trueであれば、trueの時ののブロックを実行します。
if (条件式) の後のブロックです。
そして falseであれば、falseの時のブロックを実行します。
キーワード else の後のブロックです。
基本的に、このイメージを持ちましょうというお話をしましたね。

これが、基本になります。
if – else の構文です。
そして、今回は まず
if のバリエーションを 見ていきましょう。
1つが if のみの構文。
もう1つが if – else if – else の構文です。

また、後半では 文字列の比較についても
見ていきますので、こちらも 要チェックですよ。
【2】if のみ

① フローチャート
まずは、ifのみの フローチャートからです。

前の処理からは、順次で進んできます。
そして、ひし形の中には条件式を書きます。
条件式の結果は true と false の
どちらかになりますので、分岐します。
下側が true 右側が false です。
if のみの構文は、trueの時の処理は 行いますが
falseの時の処理は 行いません。

そして、その後に、分岐した2本の線は
元の1本に合流します。ここ、ポイントですね。
1本に合流する事で
次の処理を 順次で進めていく事ができます。
1本の線で入ってきて、1本の線で抜けていく
という書き方、if – else のと時と考え方は同じですね。

②Javaの書き方
Javaでの書き方を 見ていきましょう。

if のみの構文は、if () の中に条件式を書いて
ブロックを書きます。
そして、このブロックの中には
条件式が true の時の処理を記述します。
フローチャートとの対応を見てみましょう。
左側がフローチャートで、右側が Java の if のみ構文です。

条件式を書いた条件分岐の記号が
if (条件式) に相当。
そして、trueの時の処理は if(条件)の後の
ブロックに相当します。

条件式が true の時だけ処理したい、という場合に
この構文を使うことになります。
フローチャートのイメージを 持っておきましょうね。
【3】if – else if – else

①フローチャート
こちらも、まずフローチャートからです。
条件がいくつか出てきますが、順に見ていきましょう。

前の処理からは、順次で進んできます。
最初のひし形の中には1番目の条件式を書きます。
この条件式1 がtrueの場合には、
下に行って、条件式1がtrueの処理を行います。

そして、条件式1 が false の場合に
右側に進んで、条件式2 を判断する事になります。
この 条件式2 がtrueの場合には
下に行って、条件式2 が true の処理を行います。

そして、条件式2 が false の場合に
右側に進んで、条件式3 を判断する事になります。
この 条件式3 が true の場合には、
下に行って、条件式3 が true の処理を行います。

そして、条件式3 が false の場合には
false の処理を行います。

最後に、分岐した全ての線は
元の1本に合流します。ここ、ポイントですね。
1本の線で入ってきて、1本の線で抜けていく
という書き方、全ての if構文で共通です。
ここで大切なことは
順に条件式を見て true/false を判断していく。という事と…

どれか1つが実行されることです。

このイメージを押さえておきましょうね。

どれか1つのブロックが実行されること。
…しっかりインプットしました。
②Javaの書き方
Javaでの書き方を 見ていきましょう。
if – else if – else の構文は
if () の中に 条件式1 を書いて、ブロックを書きます。
そして、このブロックの中には
条件式1が true の時の処理を記述します。

そして、このブロックの後に、else if 丸括弧
この丸括弧の中に 条件式2 を書きます。
Java の場合には、この else と if の
間に スペースを入れます。
そして、その後にブロックを書きますが
ここには、条件式2 が true の時の処理を記述します。

更に、このブロックの後に、else if 丸括弧
この丸括弧の中に 条件式3 を書きます。
次に、条件式3が true の時の処理のブロックが続きます。

最後に else を書いて最終ブロックです。
これは、どの条件も false だった時の処理のブロックです。
フローチャートとの対応を見てみましょう。
左側がフローチャートで
右側が Java の if – else if – else 構文です。

条件式1~3が 各条件式 に相当します。

そして、各条件が true の時の処理が
条件を指定した後のブロックに相当します。

どの条件にも 合致しない処理は
最後の else のブロックに相当しますね。
また、ここでは、条件1~条件3を示してありますが
条件2まででもOKですし…
条件4・条件5…と 続けて書いても大丈夫です。
そして、最後の false の処理がない場合には
else と その後のブロックは 省略することもできます。
このイメージを 持っておきましょうね。

うまく行かないんです。
System.out.print(“得意な教科は? > “);
subject = new java.util.Scanner(System.in).nextLine();
if (subject == “英語”) {
System.out.println(“僕と同じですね。”);
}

得意な教科は?。と表示してから。
1行入力を受付けます。
そして、入力された文字列が。英語だったら…。
僕と同じですね。と表示しようと思って…。
でも、英語と入力しても。
僕と同じですね、が表示されないんです。

見栄を張っているから、表示されないんじゃないの?

Javaは、そこまで、感知してるの?



Good、Good です。
そして、プログラムを見てみましょう。
この中で、思い通りに行っていないのは
この部分の、文字列の比較なんです。
この部分は、次のコーナーで 見ていきましょう。
System.out.print(“得意な教科は? > “);
subject = new java.util.Scanner(System.in).nextLine();
if (subject == “英語”) {
System.out.println(“僕と同じですね。”);
}
【4】文字列の比較

先ほどの、剛留くんのプログラムの中で
入力された文字列が “英語” だったら… の比較で
…を使用していましたね。
ここで、subject は String型変数で
データ型の大分類では、参照型でしたね…。
第6回データ型でお話した、データの大分類
基本データ型と参照型を覚えていますか?
基本データ型と参照型については、この記事でお伝えしています。
こちらも、参考にしてくださいね。
ここでも、簡単に復習しましょう。
データ型は大きく分けて
基本データ型と参照型に分けられます。

そして、その両者の大きな違いは
変数の値の持ち方にあります。
変数は、値を格納する箱ですが、基本データ型では
20、true などのデータそのものを値として格納します。
一方の参照型の変数の場合、実際のデータは 別の領域に確保され
どこに存在するかの 番地の情報を 値として持つこととなります。
この番地の情報を「参照値」といい、参照値を持つので
参照型というのでした。

そして、今回の文字列の比較の話です。
String型などの参照型の場合、関係演算子 == は
参照値(メモリー上の番地)を比較する事になります。

例として、入力した文字列をString型変数 subjectに代入すると
文字列自体は、コンピュータ内のある部分に確保されます。
例えば、その先頭が100番地だったとします。
String型の変数 subject は、参照値 100番地 を値として
持つことになります。

一方の比較対象の “英語” は文字列リテラルですね。
これは、プログラムで別の領域に準備されています。
例えば、その先頭が 50番地 だったとします。

この場合、== で比較すると、この100番地と50番地を
比較することになるのです。
もちろん、結果は false になりますね。


どうしたら、いいんでしょ~?

それは、このように書きます。
この比較対象は、リテラルや変数・定数が指定できます。
今回の例で書くと
そして、この全体の結果が true または false となります。
この書き方は、良く使われるので覚えておきましょうね。

ということで、今回のプログラムは
このように修正すると、思い通りに動くことになります。
System.out.print(“得意な教科は? > “);
subject = new java.util.Scanner(System.in).nextLine();
if (subject.equals(“英語”)) { // 修正
System.out.println(“僕と同じですね。”);
}



とっても充実感があります!
更に、頑張っていきます。

また、一歩 前進しましたよ~!
【まとめ】

【Java超入門 #11】条件分岐(2)
・ if のみ
・ if – else if – else
のみの構文です。
・ 条件式が true の時にだけ
何かを実行したい場合に使用。
else の時に 次の条件を指定して
分岐を行っていく構文。
・ 条件を順に評価していく。
(順番が大切)
・ どれか1つのブロックが実行される。
・ 最後の else {} は省略可能。
を使用する。
・ 比較対象は、リテラルや
変数・定数が指定できる。
・ 全体が true / false に置き換わる。
今回も、ご覧いただき、ありがとうございます。