2014年9月21日日曜日

- 繰り返し構文 - Java

繰り返し構文にも、いくつかのバリエーションがある。
今回は、そのバリエーションについて学ぶ。

while文

while文 は2種類ある。
前々回、学習した、「while 文」の他に
「do - while文」というもの。




































while文は、条件式を評価してから、ブロックを実行する。
判定結果が false の場合、一度もブロックが実行されない。


package blog;

public class Shopping {

 // 所持金が足りる間は本を買い続けるプログラム

 public static void main(String[] args) {

  int money = 5000;

  System.out.println("あなたは" + money + "持っています");

  int price = 5500;

  // 条件式は
  // 「money が price 以下の間は」
  while (price <= money) {

   System.out.println(price + "円の本を買います");

   // money -= price でも書けるけど、
   // わかりづらいから業務ではやめたほうがいい
   money = money - price;

   System.out.println("残金は" + money + "円です");
  }

 }
}






















一つ目の実行結果は、
price の値を 1980 円にしています。

二つ目は、money が足りていないので、何も実行されない。







































do-while文は、ブロックを実行してから、条件式を評価する。
判定結果にかかわらず、最低一回は、ブロックを実行する。



package blog;

public class Shopping2 {
 // 所持金が足りる間は本を買い続けるプログラム
 public static void main(String[] args) {

  int money = 5000;

  System.out.println("所持金は" + money + "円です");

  int price = 5500;

  // 実行文
  // 本を買って、所持金から値段分を引く
  do {
   System.out.println(price + "円の本を買います");

   money = money - price;
   System.out.println("残金は" + money + "円です");
   // 条件式
   // 所持金がお金よりも低かったら
  } while (price <= money);

 }

}





















必ず、一度は実行されるので、実行結果2のように、
所持金が足りなくても、買い物をしてしまうので注意!!
do-while文は、それほど使わないので、あまり気にしなくてもいい。


for文

for文は、繰り返しの回数を指定するときに使う。









































1,初期化処理
 最初に一回だけ実行される文。
 ここで使う変数をループ変数という。
 変数名は、なんでもいいけど、通常は i など一文字にする。
 すでに使用している変数名は使えない。(ブロック内では使える)

2,繰り返し条件
 ブロックの内容を実行する前に評価され、このループを継続するか否かを判断する条件式

3,繰り返し時の処理
 for文のブロックを最後まで処理した直後に、自動的に実行される文。


package blog;

public class Dog {

 // 犬を数えるプログラム
 public static void main(String[] args) {

  // i が 95~105の間、ワンちゃんのカウントを続ける
  for (int i = 95; i <= 105; i++) {
   System.out.println(i + "匹ワンちゃん!!");
  }

 }
}






これは、非常に簡単な繰り返し文。
もう少し、複雑なコードを書ける。


ネスト

制御構造(条件分岐、繰り返し)は、その中に、別の制御構造を含めて、多重構造にできる。
その多重構造を ネスト という。


package blog;

public class MultiplexStructure {

 // 9月末のジムに行く予定をだすプログラム
 public static void main(String[] args) {

  System.out.println("9月末は4日おきにジムに行きます");

  // 21~30の間
  for (int i = 21; i <= 30; i++) {

   System.out.println("今日は9月" + i + "日です");
   // i が 4 で割り切れるときは(割って、余りの数が出ない状態)
   if (i % 4 == 0) {
    System.out.println("ジムに行く日です");
   }

  }

 }
}

















繰り返し文の中断

繰り返し文は、途中で中断することが出来る。
二種類の中断方法がある。

break文
繰り返し自体を中断する文。

continue文
その周だけ中断し、次の周にいく文。


package blog;

public class Interruption {

 public static void main(String[] args) {

  // 複雑な条件でジムに行く日を出すプログラム

  System.out.println("9月の予定を決める");
  System.out.println("今月は、4日に一度ジムに行く");
  System.out.println("12日と20日はお休み");
  System.out.println("23日以降は、旅行でいない");
  // 1~30 の間、繰り返す処理
  for (int i = 1; i <= 30; i++) {
   System.out.println("今日は9月" + i + "日です");
   // 23日以降は、旅行でいないので、以降の処理を中断する
   if (i == 23) {
    break;
    // 12日はお休みなので、処理を飛ばす
   } else if (i == 12) {
    continue;
    // 20日はお休みなので、処理を飛ばす
   } else if (i == 20) {
    continue;
    // 4日ごとにジムにいく
   } else if (i % 4 == 0) {
    System.out.println("ジムに行く日です");
   }
  }

 }
}






























この continue の使い方は、いまいちですね。
(例文がいまいちな仕上がりになってしまったので、もう少し勉強したい。)
ぱっとみて、わかりづらいコードは、業務では好まれないから、わかりやすいコードを書くことを目指すのがいいようです。


2014年9月19日金曜日

- 分岐構文 - Java

前回、学習した分岐構文には、さまざまなバリエーションがある。
今日は、他のバリエーションについて。

if 文

if 文 は3種類ある。
前回、学習したのは 「if - else 構文」というもっとも基本の形。
あとは、「if のみ構文」、「if - else  if - else構文」2種類。
一つずつみていく。





























基本の形。
true と false で別々の処理を行う。






























条件が満たされなかった場合に何もしない。
else の中のブロック内になにも書かない場合に else を省略できる。



package blog;

public class OnlyIf {

 public static void main(String[] args) {

  System.out.println("あなたの年齢はいくつですか?");

  // age(年齢) にキーボードから入力された整数を代入する命令
  int age = new java.util.Scanner(System.in).nextInt();

  // もし、 age(年齢) が 20 以上ならば
  if (age >= 20) {
   System.out.println("あなたは、お酒がのめます!");
  }
 }
}



















2つめの実行結果は、条件が満たされなかったので、何も実行されない。



































もし、条件が満たされなかった場合、別の条件で評価するときに使う。
1つの if 文で、3つ以上のルートに分岐できる。


package blog;

public class PluralityConditi {

 // 猫の年齢で、成長過程かどうかを表示する
 public static void main(String[] args) {

  // 0~24 の整数をランダムで catAge に代入
  int catAge = new java.util.Random().nextInt(25);
  System.out.println(catAge + "歳の猫がいます");

  // catAge が 0 だったら
  if (catAge == 0) {
   System.out.println("猫はまだまだ成長期!!");
   // catAge が 6 以下だったら
  } else if (catAge <= 6) {
   System.out.println("猫は、もう おとな だよ!");
   // catAge が 16 以下だったら
  } else if (catAge <= 16) {
   System.out.println("猫は、もう 高齢 だよ!!");
   // それ以外なら(17~24)
  } else {
   System.out.println("長寿!!!");
  }

 }

}












switch 文

if 文をスマートな形で書くための文。

使える条件

・「変数 == 値」「変数 == 変数」のように、右辺と左辺が一致するかを比較する式のとき
・値が整数(byte型,short型,int型)、または文字(char型)のみ。
 小数、文字列には使えない。

書く際の注意点
・ switch の直後に書くのは、条件式ではなく、変数名
・ case の横に 値 を書き、後ろに コロン(:)を書く。(;)と間違えないように!!
・ case 以降の末尾に break 文を忘れないように。
 (書き忘れると、次の case文へ処理が進む!)
・ default:(デフォルトラベル)は、省略可能。



































package blog;

public class Switch {

 // 日にちを入力したら、天気予報を出力する
 public static void main(String[] args) {

  System.out.println("9/19~23までの東京の天気予報です。");
  System.out.println("いつの天気が知りたいですか?");
  System.out.println("19~23の好きな日を入力してね!");

  // day にキーボードから入力された数字を代入
  int day = new java.util.Scanner(System.in).nextInt();

  switch (day) {
  // day が 19 の場合は
  case 19:
   System.out.println(day + "日は、晴れのち曇りです");
   break;
  // day が 20 の場合は
  case 20:
   System.out.println(day + "日は、曇りです");
   break;
  // day が 21 の場合は
  case 21:
   System.out.println(day + "日は曇りのち雨です");
   break;
  // day が 22 の場合は
  case 22:
   System.out.println(day + "日は曇りです");
   break;
  // day が 23 の場合は
  case 23:
   System.out.println(day + "日は曇りのち晴れです");
   break;

  // それ以外の場合
  default:
   System.out.println("何も表示されない場合は、入力した数字が間違ってます。");
  }

  System.out.println("同じ処理を if-else if-else 文で書きます");
  // もしも、 day が 19のときは
  if (day == 19) {
   System.out.println(day + "日は、晴れのち曇りです");
   // もしも、 day が 20のときは
  } else if (day == 20) {
   System.out.println(day + "日は、曇りです");
   // もしも、 day が 21のときは
  } else if (day == 21) {
   System.out.println(day + "日は、曇りです");
   // もしも、 day が 22のときは
  } else if (day == 22) {
   System.out.println(day + "日は、曇りです");
   // もしも、 day が 23のときは
  } else if (day == 23) {
   System.out.println(day + "日は、曇りです");
   // そうでなければ
  } else {
   System.out.println("何も表示されない場合は、入力した数字が間違ってます。");
  }
 }
}