2014年9月19日金曜日

- 条件分岐 と 繰り返し - Java

今まで学習した文は、すべて上から順に実行される文。
今日は、他の順番の文を学習する。

制御構造

文を実行させる順番のことを 制御構造(制御フロー) という。
フローというのは英語で Flow 流れ、という意味。
よく耳にする フローチャート というのは、処理の流れ を表している。
























代表的な制御構文は三つ。

「順次」、「分岐」、「繰り返し」。

この三つを組み合わせると、どんな複雑なプログラムでも作成可能らしい。
(構造化定理)

今まで書いてきたものは、全て、「順次」の文。
上から下に一つずつ実行していく単純なもの。


分岐

条件によって結果が変わるのが分岐。
「もし、……だったら、……」
「でも、……なら、……しよう」
日本語で考えると、簡単です。

誰しもが一度は考える、「もし、宝くじが当たったら……」なんていうのも
分岐の一つですね。

if という命令を使う。
if は 「もしも」 という意味。
else は 「そうでなければ」 という意味。

















































package blog;

public class Junction {

 public static void main(String[] args) {

  boolean money = true;

  System.out.println("お財布にお金が入ってたかなぁ……。");

  // もし、 money が true だったら
  if (money == true) {
   System.out.println("本を買います。");
   System.out.println("あとは、お菓子を買って帰ります。");

   // そうでなければ
  } else {
   System.out.println("歩いて家に帰ります。");
  }

 }

}


















実行結果の一つ目が、 money が true だった場合。
二つ目が、 money が false だった場合。


ここでは、
(money == true ) の部分が条件式。



繰り返し

条件によって、繰り返し(ループ)を続ける。
「……の間は……」

while という命令を使う。
while は 「~の間は」 という意味。

















































package blog;

public class Loop {

 public static void main(String[] args) {
  System.out.println("新しいレアカードが発売されたらしいなぁ……。");

  boolean desire = false;

  // desire が true の場合は 無限ループになる
  // false の場合は そのまま終了。
  while (desire == true) {
   System.out.println("カードを引いてみよう");
   System.out.println("もっと……。");
  }

  System.out.println("興味ないな。");
 }

}













ブロックと条件式

ブロックとは、複数の文をひとまとまりとして扱うもの。
ブロック内で宣言した変数は、ブロックが終わると消える。


条件式とは、分岐や繰り返しの条件を表すもの。
式の中には 関係演算子 を使う。
!! 評価結果が 必ず true または false になる式にする必要がある !!

条件式で用いる演算子は、

条件が成立した場合に true
そうでない場合に false

に変化する。

条件式の中で用いられる演算子(==、>、<=など)には三種類ある。


ひとつめは、関係演算子
条件が一つのときに使う。
関係演算子






















ふたつめは、論理演算子
二つ以上の条件を組み合わせるときに使う。
業務では、三つ以上組み合わせると怒られる。(わかりづらい)
論理演算子












みっつめは、否定演算子
「もし~でないならば」という否定系の条件式に用いる。
"!"をつける。

if (! (size == 10)){   size が 10 に等しくないなら true


package blog;

public class LogicalOperator {

 // 習った円周率によって、ざっくりと生まれた年代を表してみる
 public static void main(String[] args) {

  // circularConstant は 円周率 という意味
  double circularConstant = 3.14;

  // もしも、円周率が 3.14 では なかったら!!
  if (!(circularConstant == 3.14)) {
   System.out.println("平成生まれ!!");

   // そうでなければ
  } else {
   System.out.println("昭和生まれ!!!");
  }
  System.out.println("実は、ゆとり世代が、円周率を 3 と習ったというのは");
  System.out.println("デマらしいですよ!!");
 }

}












最後に、文字列を比較したい場合の注意点。
文字列は == で比較することができない。

代わりに
  変数名 . equals ("文字列")
と書く。
変数の中身と文字列が一致した場合に true になる。



package blog;

public class StringComparison {

 public static void main(String[] args) {

  String name = "ともみ";

  // もしも name の中身が "ともみ" だったら
  if (name.equals("ともみ")) {
   System.out.println("ログインに成功しました");
   // そうでなければ
  } else {
   System.out.println("ユーザーが違います");
  }

  System.out.println("もう一度、試します");

  // もしも name の中身が "さとし" だったら
  if (name.equals("さとし")) {
   System.out.println("ログインに成功しました");
   // そうでなければ
  } else {
   System.out.println("ユーザーが違います");
  }
 }

}













name.equals("ともみ")の部分が
name == "ともみ"
でも、コンパイルエラーが起きずに、変な動作をするから
忘れないように注意しよう!

0 件のコメント:

コメントを投稿