ここでマスターしたいこと
- 2つ以上の条件の判定を書けるようになること
- マウスがlabel2の上に重なったら、label2を消せるようになること
複数の条件を判定する「&&」と「||」
ifの使い方で、変数がある値だった時の判定を作ることができるようになった。では、入力された数値が0~4の時は「こんばんは」、5~11の時は「おはよう」、12~17の時は「こんにちは」、18~24の時は「こんばんは」と表示するにはどうしたらよいだろうか。
両方とも条件が成立しているかを判定する「&&」
「おはよう」について検討してみる。5~11を言葉で表すと、「5以上、かつ、11以下」である。時間を変数aに代入していたとすると、a>=5と、a<=11の両方とも成立している、という判定が書ければよい。左辺と右辺のどちらも成立していることを表すには、「&」を2つ並べた「&&」を使う。
(a>=5) && (a<=11)
textBox1に入力された値を判定して、「おはよう」と表示するプログラムは以下の通りである。
int a = int.Parse(textBox1.Text); if ((a >= 5) && (a <= 11)) { MessageBox.Show("おはよう"); }
「こんにちは」も同様に作成できる。
注意!!
数学では「5 <= a <= 11」と書くが、C#では意味のない式になる。
どちらか一方でも成立しているかを判定する「||」
「こんばんは」は、0~4か、18~24のどちら一方が成立したら表示されるものである。0より小さい値や、24より大きい値は今回は入力されないものとすると、「4以下、あるいは、18以上」が判定できればよい。どちらか一方でもを表現するのは「|」([Shift]キー+[¥]キー)を2つ並べた「||」を使う。
(a <= 4) || (a >= 18)
「おはよう」の判定に続いて、以下のプログラムを書けば「こんばんは」が判定できる。
if ((a <= 4) || (a >= 18)) { MessageBox.Show("こんばんは"); }
挨拶の作成
手順
- 新規プロジェクトを作成し、名前を「projIf2」とする。
- 以下のようなフォームを作成。
- ボタンをダブルクリックしてコードを開いた場所に、以下のプログラムを入力する。
int a = int.Parse(textBox1.Text); if ((a >= 5) && (a <= 11)) { MessageBox.Show("おはよう"); } if ((a >= 12) && (a <= 17)) { MessageBox.Show("こんにちは"); } if ((a <= 4) || (a >= 18)) { MessageBox.Show("こんばんは"); }
動作例
3つ以上の条件も判定できる
例えば、1、3、5のいずれかかどうかを判定したい場合は、以下のように書けばよい。
int a = int.Parse(textBox1.Text); if ((a == 1) || (a == 3) || (a == 5)) { MessageBox.Show("1か3か5です"); }
- &&も同様に複数書くことが可能。
- &&と||を組み合わせたり、()で優先順位を付けたりすることで、様々な条件式を作ることができる。
演習
前の項の演習で作成したプロジェクトにプログラムを追加して、跳ね返るlabel2にマウスカーソルを重ねると、label2が消えるようにしよう。
手順
- ifの使い方の演習で作成したプロジェクトを開く。
- timer1をダブルクリックする。
- timer1のブロックの最後にプログラムを追加する。
ヒント
- 扱う座標は以下の通り。
- 以下の文章の穴埋めをしよう。
- mpos.Xが( A )以上、( B )、( C )以下である。
- mpos.Yが( D )以上、( E )、( F )以下である。
- 上記が( G )成立している時、マウスがlabel2に重なっている。
- (A)(C)(D)(F)は、label2のプロパティのいずれかが入る
- (B)(E)は、「かつ」か「あるいは」のいずれかが入る
- (G)は、「両方とも」か「どちらか一方でも」のいずれかが入る
- 以下のプログラムで、label2を消すことができる。
label2.Visible = false;
動作例
おまけ演習
前の項の演習で実装したラベルが画面内を跳ね回る処理だが、この項の内容を応用するif文を減らすことができる。検討してみよう。