4−1 分岐処理(1)
−基本的な if 文−


以前【基礎課題1-10】で、下のようなフォームプログラムを作りました。



このプログラムでは、
  1.チェックされた項目の数を数える。
  2.その数に応じて、診断結果を出す。

という2つの部分が必要です。
今回、このプログラムに2.の機能を付け加えてみましょう。
1.については、今回は考えません。項目の数は自分で数えることにします。


基礎課題4−1
このプログラムを新しい名前で保存してから、下のようなフォームのプログラムに作り変えてください。



主なコンポーネントのNameプロパティは、次のようにしてください。

コンポーネント Name
ボタン「診断」 jButtonShindan
テキストフィールド「チェック項目数」 jTextFieldCount
チェックボックス「6-10」 jCheckBoxHigh
チェックボックス「0-5」 jCheckBoxLow
テキストフィールド jTextFieldMessage

「チェック項目数」を入力してから「診断」ボタンを押したとき、

 ・チェック項目数が6以上のとき
 ・チェックボックス「6-10」をチェックする
 ・メッセージ欄に「少しストレスがたまっています。気分転換を。」と表示する。

 ・チェック項目数が6以上ではないとき
 ・チェックボックス「0-5」をチェックする
 ・メッセージ欄に「ストレスの兆候がありますが、心配は不要。」と表示する。

ようなプログラムを作りましょう。

ある条件が成り立っているか成り立っていないかによって行う内容が変わる場合には、ifを用いて表します。

 ifもし〜ならば、・・・を実行するというような処理を作成します。
条件が成り立っているか成り立っていないかによって、プログラムの流れを分岐させます。
 
if (条件式){
    ・
    ・ ←条件を判断した結果が成り立つときに実行する処理
    ・
}
else{
    ・
    ・ ←条件を判断した結果が成り立たないときに実行する処理
    ・
}
条件は、
 ・成り立つ
 ・成り立たない
のどちらかしかありません。したがってプログラムは、
 ・{ 以下の文
 ・else { 以下の文
どちらか一つを必ず実行し、かついずれか一つしか実行しません。

診断」ボタンをクリックしたときのイベントハンドラを、次のように書いてください。

注意
面倒でも、『第3章 3−2 Javaの約束事』で説明したように、半角スペース4字分ずつの
字下げ」を必ず行い読みやすいプログラムの書き方を行ってください

 Javaの関係演算子
条件判断構造の基本となるのは値の比較です。
Java
では値の比較に、下記に示す関係演算子を使います。
※記号と記号の間にスペースは含まれません。
数学表記 意味 Javaでの表記
A > B AはBより大きい A > B
A ≧ B AはB以上 A >= B
A = B AはBに等しい A == B
A ≦ B AはB以下 A <= B
A < B AはBより小さい A < B
A ≠ B AはBに等しくない A != B


基礎課題4−2
次のようなフレームを持つプログラムを作ってください。 主なコンポーネントのNameプロパティは、
次のようにしてください。
コンポーネント名 Name
上のテキストフィールド jTextFieldOld
ボタン「入力完了」 jButtonInput
中のテキストフィールド jTextField1
下のテキストフィールド jTextField2

年齢を入力してから「入力完了」ボタンを押すと、

2つのメッセージが表示されます。

年齢とメッセージの対応は、次の表にしたがってください。
年齢  メッセージ
20歳以上 あなたは成年ですね。あなたには選挙権があります。
19歳以下 あなたは未成年ですね。あなたに選挙権はありません。
右の枠内を埋めて、プログラムを完成させて下さい。

基礎課題4−2の解答


練習問題

 新しいコンポーネント「ラジオボタン」の使い方を覚えましょう。
コンポーネントパレットからラジオボタンのアイコンを選んで、フレーム上に3つ貼ってください。



このままの状態でプログラムを実行して、ラジオボタンをクリックして下さい。
ラジオボタンはどういうはたらきをするコンポーネントか、下に書いてください。

 インスペクタから3つあるラジオボタンのうちのいずれかを選んで、
そのselectedプロパティの値をTrueFalseに変えてみましょう。

何が起こりますか?

True→                                    

False→                                    


基礎課題4−3
次のようなフレームをもつプログラムを作ってください。 チェック項目とメッセージの対応は、
以下のとおりです。
チェック項目 メッセージ
女性 あなたは女性ですね。右側の階段をお上り下さい。
男性 あなたは男性ですね。左側の階段をお上り下さい
プログラムの動作内容は以下の通りです。

実行してから性別をチェックしてボタンを押すと、下のように2つのメッセージが表示される。

基礎課題4−3の解答


基礎課題4−4
次のようなフレームを持つプログラムを作ってください。

主なコンポーネントのNameプロパティは、次のようにして下さい。
コンポーネント名 Name
ラジオボタン「女性」 jRadioButtonF
ラジオボタン「男性」 jRadioButtonM
ボタン「OK」 jButtonOK
チェックボックス「20歳以上」 jCheckBoxOld

注意 
秘密倶楽部」は架空の団体ですが、もしかすると実在するかもしれません。
プログラムの動作内容は次のとおりです。

性別と年齢をチェックしてから「OK」ボタンを押すと、2つのメッセージが表示されます。

性別・年齢の条件とメッセージの対応は、次の表にしたがって下さい。

性別・年齢 メッセージ
女性で、かつ、20歳以上 あなたは入会資格があります。どうぞお入りください。
それ以外 あなたは入会資格がありません。残念ですがお帰りください。

 『&&論理AND演算子と呼ばれます。
 
 『条件1を満たしていて、さらに条件2を満たしているかどうか』―つまり、2つの条件を両方満たす必要があるときに使います。

上記の場合では
「女性で、かつ、20歳以上」

「jRadioButtonFがチェックされていて、かつ、jCheckBoxOldがチェックされている」
( ( jRadioButtonF.isSelected() ) && ( jCheckBoxOld.isSelected() ) )

のように&&(&が2つ)を用いて表します。

下の枠内を埋めて、プログラムを完成させてください。


基礎課題4−4の解答


 || 』は論理OR演算子と呼ばれます。

 『条件1を満たしているかどうか、または、条件2を満たしているかどうか』―つまり、
2つの条件のうちどちらかが正しければよいときに使います。 

 「女性、または、20歳以上」

「jRadioButtonFがチェックされている、または、jCheckBoxOldがチェックされている」
( ( jRadioButtonF.isSelected() ) || ( jCheckBoxOld.isSelected() ) )


基礎課題4−5
次のようなフレームを持つプログラムを作って下さい。
主なコンポーネントのNameプロパティは、次のようにしてください。

コンポーネント名 Name
テキストフィールド jTextFieldNumber


ここで、プログラムを実行し、数を入力してからOKボタンを押したとき、
  • 数が4以上7以上であれば、メッセージ欄に「教務課」と表示する。
  • 数がそれ以外であれば、メッセージ欄に「森田研究室」と表示する。
ようなプログラムを作ってください。

if文のネスト
   if文の中に別のif文を作成することができます。これをネストと呼びます。if文のネストは、『&&論理AND演算子と同じ処理になります。
 スピンエディットに入力された値が『4以上7以下』であることを表すのに、
   4 <= Number <= 7
と書くと、プログラムの間違いとされてしまいます。

 次の2つのプログラムは、どちらもテキストフィールドに入力された値が『4以上7以下』という同じ意味になります条件式が複雑なときは(A)のように記述したほうが読みやすくなります。厳密にいえば、(B)のほうがプログラムが少ない分だけ処理速度は速くなります。しかし、それは本当にわずかな差でしかありません。実際に動かしてみると、処理速度の違いはわかりません。それよりも、作成するプログラムに応じて読みやすくするようにしましょう。
(A) (B)
if( Number >= 4 ){
  if
( Number <= 7){
     
  }
}
if( ( Number >= 4 )
            &&
( Number <= 7 ) ) {

}

基礎課題4−5の解答


 上のプログラムは、次の様に書くことが出来ます。
 このようにif { と else { の後に、それぞれ1つの処理しかしないときは、{ }で囲む必要はありません。
言い換えると、実行する処理が複数文であるときは必ず{}で囲まなければならないということになります。

 if文、else文の後ろには、セミコロン(;)を付けません。
条件式を判断した結果実行する文の終わりには、必ずセミコロン(;)が必要とされます。

 しかし、  と } がついていてもエラーになるわけではないので、処理する文が1つのときでも読みやすいプログラムのため、
 と を消さずに残しておくようにすることを勧めます。