tanaka's Programming Memo

プログラミングについてのメモ。

602 ifで2つ以上の条件を判定する(当たり判定)

ここでマスターしたいこと

  • 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」とする。
  • 以下のようなフォームを作成。

f:id:am1tanaka:20141127202848p:plain

  • ボタンをダブルクリックしてコードを開いた場所に、以下のプログラムを入力する。
            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("こんばんは");
            }

動作例

f:id:am1tanaka:20141127202806g:plain

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のブロックの最後にプログラムを追加する。

ヒント

  • 扱う座標は以下の通り。

f:id:am1tanaka:20141127205455p:plain

  • 以下の文章の穴埋めをしよう。
    • mpos.Xが( A )以上、( B )、( C )以下である。
    • mpos.Yが( D )以上、( E )、( F )以下である。
    • 上記が( G )成立している時、マウスがlabel2に重なっている。
      • (A)(C)(D)(F)は、label2のプロパティのいずれかが入る
      • (B)(E)は、「かつ」か「あるいは」のいずれかが入る
      • (G)は、「両方とも」か「どちらか一方でも」のいずれかが入る
  • 以下のプログラムで、label2を消すことができる。
label2.Visible = false;

動作例

f:id:am1tanaka:20141127212325g:plain

おまけ演習

前の項の演習で実装したラベルが画面内を跳ね回る処理だが、この項の内容を応用するif文を減らすことができる。検討してみよう。

まとめ

  • 複数の条件が両方とも成立していることは&&で判定する。
  • 複数の条件がどちらか一方でも成立していることは||で判定する。
  • 0<=a<=10のような書き方はできない。
  • 3つ以上の条件は、&&や||で条件を並べることで書くことができる。


前へ | 目次 | 次へ