[Java入門]初心者がJava言語を覚えてみる(条件分岐)
コレまでの内容
- [Java入門]初心者がJava言語を覚えてみる(準備)
- [Java入門]初心者がJava言語を覚えてみる(コンパイル)
- [Java入門]初心者がJava言語を覚えてみる(基本文法)
- [Java入門]初心者がJava言語を覚えてみる(変数と型)
- [Java入門]初心者がJava言語を覚えてみる(基本データ型)
[Java入門]初心者がJava言語を覚えてみる(条件分岐)
とうとう制御文まできました。
ココがJava言語を覚える難関の一つかも知れません。
逆にココを超えて、初心者脱出です。
皆さん初級者になれます!
その前に、、、
制御で結構重要な boolean 型
前回かるーく流した boolean 型、ここで結構重要になります。
なんせ、繰り返し条件だったり、プログラムの分岐条件ってコレでやるしね(^^;
先ずは、この boolean 式を使う方法を学ぶとする。
-
int i=32;
-
boolean b;
としておいて、
-
b = i < 64;
とか使った記憶あったよね?w
コレには結構色んな種類がある。
| < | 小なり |
| > | 大なり |
| <= | 以下 |
| <= | 以上 |
| == | 等しい |
| ! | 真偽逆転 |
| && | なおかつ |
| || | もしくは |
といった種類がある。
基本分岐
if文 について、
まぁ条件分岐なんて難しいコト言ってますが、
「このときはこうする」
でええやん。
基本的には以下の通り。
-
if ( 条件(boolean) )
-
{
-
(条件に一致した場合に動く部分)
-
}
-
else
-
{
-
(条件に一致しなかった場合に動く部分)
-
}
else 以降は無くても動きます。
まぁこっからは作って覚えましょ?
先ず、必要なネタからいきましょう。
-
public class if_sample
-
{
-
{
-
}
-
}
ここから色々やってみましょう。
今回の目的は、「西暦14894年が閏年かどうか」です。
閏年って分かります?
ホラ、オリンピックやる年です。
4 で割りきれる年は閏年
100 で割り切れたら閏年じゃない
400 で割り切れたら閏年
でしたよね?
早速書いてみます。
条件的に、400で割り切れるかどうかというのは、
一番優先されそうですよね?
考え方は、400で割り切れる = 400で割った余りが 0 で考えます。
-
public class if_sample
-
{
-
{
-
int year = 14894;
-
if( (year%400) == 0 )
-
{
-
}
-
}
-
}
次に、 100 で割り切れたら閏年じゃない。
は、いいとして、
既に「閏年」と判定されてるものを「閏年じゃない」って言っていいの?
って問題があります。
つまり、
-
public class if_sample
-
{
-
{
-
int year = 14894;
-
if( (year%400) == 0 )
-
{
-
}
-
if( (year%100) == 0 )
-
{
-
}
-
}
-
}
って言えないよね?
西暦2000年で試してみましょう。
これは、400で割れるので、閏年ですが、、、、
-
public class if_sample
-
{
-
{
-
int year = 2000;
-
if( (year%400) == 0 )
-
{
-
}
-
if( (year%100) == 0 )
-
{
-
}
-
}
-
}
実行結果
-
2000 は閏年です
-
2000 は閏年じゃないです
とまぁ、ちんぷんかんぷんなコト言います。
避ける為には、さっき出てきた else ってのを使いましょう。
-
public class if_sample
-
{
-
{
-
int year = 2000;
-
if( (year%400) == 0 )
-
{
-
}
-
else
-
{
-
if( (year%100) == 0 )
-
{
-
}
-
}
-
}
-
}
あれ? {} の中に {} って書いていいの?
って思った人。
全然OKっす
ガンガン書いてください。
この様に、入れ子の関係を作ることを、プログラムの世界では
「ネスト」といいます。
でももう少し綺麗なコードにならない?
そう思った人!正しい。
こういう書き方もできます。
-
public class if_sample
-
{
-
{
-
int year = 2000;
-
if( (year%400) == 0 )
-
{
-
}
-
else if( (year%100) == 0 )
-
{
-
}
-
}
-
}
ぉぉぅ。
見た目スッキリー。
「else if」 という書き方で、「それ以外で、こういう条件のとき」
ですね。
-
if ( 条件 1 )
-
{
-
( 条件 1 に合ったときに動く )
-
}
-
else if ( 条件 2 )
-
{
-
( 条件 1 に合わないけど、条件 2 に合ったとき動く )
-
}
-
else
-
{
-
( 全ての条件に合わなかったときに動く )
-
}
という書き方です。
ここで、「else if」は何個でも書くことが出来ます。
最後に、「4で割り切れたら閏年」も追加しましょう。
-
public class if_sample
-
{
-
{
-
int year = 14894;
-
if( (year % 400) == 0 )
-
{
-
}
-
else if( (year % 100) == 0 )
-
{
-
}
-
else if( (year % 4) == 0 )
-
{
-
}
-
}
-
}
その他の場合は、閏年ではありませんから、
-
public class if_sample
-
{
-
{
-
int year = 14894;
-
if( (year % 400) == 0 )
-
{
-
}
-
else if( (year % 100) == 0 )
-
{
-
}
-
else if( (year % 4) == 0 )
-
{
-
}
-
else
-
{
-
}
-
}
-
}
これで一応完成です。
ですが、良く考えれば、boolean の計算には、
「&&(左も右も)」「||(もしくは)」ってのありましたよね?
これを使えば綺麗に書けるんじゃない?
先ずは、400 で割って余りが 0 のときは閏年(true)
-
int year = 14894;
-
boolean b;
-
b = ((year % 400) == 0);
-
それ以外(もしくは)、100 で割った余りが 0 のとき、閏年ではない(false)。
-
int year = 14894;
-
boolean b;
-
b = ((year % 400) == 0) || !((year % 100) == 0)) ;
-
なおかつ、4 で割った余りが 0 のとき、閏年(true)。
-
int year = 14894;
-
boolean b;
-
b = ((year % 400) == 0) || ( !((year % 100) == 0) && ((year % 4) == 0) ));
-
もう何がなんだか、、、、
分かりにくければ、下の考え方もある。
日本語に直すとこんな感じ。
(year を 400 で割れたら true) もしくは ( (year を 100 で割れたらfalse) なおかつ (year を 4 で割れたらtrue) )
true の反対は false , false の反対は true なので、
(year を 100 で割れたらfalse) = !(year を 100 で割れたらtrue)
(year を 400 で割れたら true) もしくは ( !(year を 100 で割れたらtrue) なおかつ (year を 4 で割れたらtrue) )
「もしくは」は「||」で、「なおかつ」は「&&」だから、
(year を 400 で割れたら true) || ( !(year を 100 で割れたらtrue) && (year を 4 で割れたらtrue) )
「year を X で割れたら true」 は、
「year を X で割った余りが 0 なら true」なので、
「(year % X)==0」
だから、
((year % 400) == 0) || ( !((year % 100)==0) && ((year % 4) == 0) )
理屈は分かるでしょ?
そうするとこんな感じになる。
-
public class if_sample
-
{
-
{
-
int year = 14894;
-
boolean b;
-
b = (year % 400) == 0) || ( !((year % 100) == 0) && ((year % 4) == 0) );
-
if( b )
-
{
-
}
-
else
-
{
-
}
-
}
-
}
何か1行だけ長くて見栄えが、、、、
ここで、「改行と、半角スペースはいくら入れてもOK」を思い出すと、
-
public class if_sample
-
{
-
{
-
int year = 14894;
-
boolean b;
-
b = (year % 400) == 0)
-
|| (
-
!((year % 100) == 0)
-
&& ((year % 4) == 0)
-
);
-
if( b )
-
{
-
}
-
else
-
{
-
}
-
}
-
}
さて、完成といえるでしょう。
プログラムにメモ書きしよう
さて、ここで問題です。
こんな複雑な式を覚えておける?
後で見て理解する自信ある?
僕はムリ!
プログラマの格言にこんなものがあります。
「3日前の自分は他人」
ええ、何を思って書いたのか分からんのです。
そこで、プログラムの中にメモ書きをするコトにします。
メモ書きは二種類あって、長文メモと一行メモの2つがあります。
長文メモの例
-
/* 左の2文字から
-
↓の2文字までの間は、何書いてもOK!
-
*/
一行メモの例
-
// 「//」から改行するまでは有効。何書いてもOK
これで、メモを入れていきましょうか。
-
/* これは if 文のサンプルです。
-
内容としては、 14894年が、閏年かどうかを判定してます。
-
*/
-
public class if_sample
-
{
-
{
-
// 判定したい年
-
int year = 14894;
-
boolean b;
-
// 判定計算。閏年なら true
-
// 400 で割り切れたら true
-
b = (year % 400) == 0)
-
// もしくは
-
|| (
-
// 100 で割り切れなければ true
-
!((year % 100) == 0)
-
// なおかつ 4 で割り切れたら true
-
&& ((year % 4) == 0)
-
);
-
if( b )
-
{
-
}
-
else
-
{
-
}
-
}
-
}
と、メモ書きを残してみました。
何?まだ不安?
なら、一番難しいところをメモ書きする?
-
/* これは if 文のサンプルです。
-
内容としては、 14894年が、閏年かどうかを判定してます。
-
-
一番難しいところ → 閏年かどうかの判定
-
最初は日本語で考えてみる。
-
-
(year を 400 で割れたら true) もしくは ( (year を 100 で割れたらfalse) なおかつ (year を 4 で割れたらtrue) )
-
-
true の反対は false , false の反対は true なので、
-
(year を 100 で割れたらfalse) = !(year を 100 で割れたらtrue)
-
-
(year を 400 で割れたら true) もしくは ( !(year を 100 で割れたらtrue) なおかつ (year を 4 で割れたらtrue) )
-
-
「もしくは」は「||」で、「なおかつ」は「&&」だから、
-
-
(year を 400 で割れたら true) || ( !(year を 100 で割れたらtrue) && (year を 4 で割れたらtrue) )
-
-
「year を X で割れたら true」 は、
-
「year を X で割った余りが 0 なら true」なので、
-
「(year % X)==0」
-
だから、
-
-
((year % 400) == 0) || ( !((year % 100)==0) && ((year % 4) == 0) )
-
*/
-
public class if_sample
-
{
-
{
-
// 判定したい年
-
int year = 14894;
-
boolean b;
-
// 判定計算。閏年なら true
-
// 400 で割り切れたら true
-
b = (year % 400) == 0)
-
// もしくは
-
|| (
-
// 100 で割り切れなければ true
-
!((year % 100) == 0)
-
// なおかつ 4 で割り切れたら true
-
&& ((year % 4) == 0)
-
);
-
if( b )
-
{
-
}
-
else
-
{
-
}
-
}
-
}
これでどうでしょう?
これって実は結構、教科書とか、学校の授業で出る問題なんですよね。
覚えておくと学校の授業が楽になる?
本日のまとめ
- 「boolean」は単純に見えておくが深い
- 「if」文で、条件付で実行できる
- 「if」に合わなくても、「else if」で追加条件ができる
- 「else」で条件に合わないときのものが書ける
- 「//」や「/* */」で、プログラムの中にメモ書きできる
Filed under: Java on 5 月 13th, 2008 | No Comments »
