もくじ
ifの練習問題
if(3-3まで)の問題記事の解答及び解説記事です。
プログラムの解答はあくまでも一例です。問題によっては違う記述方法もあります。
【Java】if 練習問題 サンプルプログラム
以下のプログラム内にはコメントで指示がありますので、コメントの下にプログラミングを行ってください(実行結果も参考にプログラミングしてください)。表示や演算には作成した変数を利用して下さい。workフォルダ内に「Exam08.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
プログラム 解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
class Exam08{ public static void main(String[] args){ /* 以下の変数を作成してください 型:String 変数名:student_name 初期値:"田中" 型:int 変数名:japanese_score 初期値:85 型:int 変数名:mathematical_score 初期値:66 */ String student_name = "田中"; int japanese_score = 85; int mathematical_score = 66; //型:double 変数名:average_score 初期値:国語の点数と数学の点数の平均値 double average_score = (japanese_score + mathematical_score) / 2.0; //国語の点数を表示して下さい System.out.println(student_name + "さんの国語の点数は" + japanese_score + "点です。"); //数学の点数を表示して下さい System.out.println(student_name + "さんの数学の点数は" + mathematical_score + "点です。"); //国語と数学の平均点を表示して下さい System.out.println(student_name + "さんの平均点は" + average_score + "点です。"); /* 以下のifを作成して下さい 平均点が65点以上の場合、「合格です。」と表示 平均点が65点に満たないの場合、「不合格です。」と表示 */ if(average_score >= 65){ System.out.println("合格です。"); }else{ System.out.println("不合格です。"); } } } |
実行結果
c:\work>javac Exam08.java
c:\work>java Exam08
田中さんの国語の点数は85点です。
田中さんの数学の点数は66点です。
田中さんの平均点は75.5点です。
合格です。
if 練習問題の解説
ポイント1 平均値の算出時の計算式
1 |
(japanese_score + mathematical_score) / 2.0 |
2で割り算を行うと、int同士の計算となり結果もintとなってしまうため、2.0のdouble型で計算を行っています。
ポイント2 条件分岐
1 |
if(average_score >= 65){ |
平均点はaverage_scoreに保存されており、比較演算子でaverage_scoreが65以上かどうかをみています。65未満はelse ifで条件指定しても良いですが、今回はelseで代用しています。
【Java】if 練習問題の追加指示 サンプルプログラム
「Exam08.java」を以下の指示のように編集して下さい。
保存後、コンパイルおよび実行を行ってください。
指示1:平均点によって表示を変更するif文を以下のように変更して下さい。
条件 | 表示内容 |
---|---|
平均点が80点以上 | 高得点!おめでとう。 |
平均点が80-65点の範囲 (80は含まないが、65は含む) |
もう少しで高得点。 |
平均点が65-35点の範囲 (65は含まないが、35は含む) |
もう少し頑張りましょう。 |
平均点が35点未満 | 追試です。 |
指示2:国語と数学の平均点を任意で変更し、全ての結果が表示されるように確認して下さい。
プログラム 解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
class Exam08{ public static void main(String[] args){ /* 以下の変数を作成してください 型:String 変数名:student_name 初期値:"田中" 型:int 変数名:japanese_score 初期値:任意 型:int 変数名:mathematical_score 初期値:任意 */ String student_name = "田中"; int japanese_score = 80; int mathematical_score = 80; //型:double 変数名:average_score 初期値:国語の点数と数学の点数の平均値 double average_score = (japanese_score + mathematical_score) / 2.0; //国語の点数を表示して下さい System.out.println(student_name + "さんの国語の点数は" + japanese_score + "点です。"); //数学の点数を表示して下さい System.out.println(student_name + "さんの数学の点数は" + mathematical_score + "点です。"); //国語と数学の平均点を表示して下さい System.out.println(student_name + "さんの平均点は" + average_score + "点です。"); /* 追加演習 if文を変更 */ if(average_score >= 80){ System.out.println("高得点!おめでとう。"); }else if(average_score >= 65){ System.out.println("もう少しで高得点。"); }else if(average_score >= 35){ System.out.println("もう少し頑張りましょう。"); }else{ System.out.println("追試です。"); } } } |
実行結果
c:\work>javac Exam08.java
c:\work>java Exam08
田中さんの国語の点数は80点です。
田中さんの数学の点数は80点です。
田中さんの平均点は80.0点です。
高得点!おめでとう。
c:\work>javac Exam08.java
C:\work>java Exam08
田中さんの国語の点数は60点です。
田中さんの数学の点数は69点です。
田中さんの平均点は64.5点です。
もう少し頑張りましょう。
if 追加指示の解説
ポイント 条件分岐
1 2 3 4 5 6 7 8 9 |
if(average_score >= 80){ System.out.println("高得点!おめでとう。"); }else if(average_score >= 65){ System.out.println("もう少しで高得点。"); }else if(average_score >= 35){ System.out.println("もう少し頑張りましょう。"); }else{ System.out.println("追試です。"); } |
if-else if-elseの条件分岐は複数ある場合は、上から下に条件をみていきます。今回は以下のような順序で条件を確認することになります。()内は表示される文字列です。
- average_score >= 80(高得点)
- average_score >= 65(もう少しで高得点)
- average_score >= 35(頑張りましょう)
- 上記の条件以外(追試です)
if-else if-elseの条件分岐は条件に合致しない場合に次の条件を確認します。例えば、「average_score >= 65」の条件に合致しない場合、「average_score >= 35」以降の条件を確認します。以降の条件も上の条件に当てはまらない場合に実行されます。
②の部分である「average_score >= 65」の条件だと80や90も含まれますが、average_scoreが80に満たない場合に条件を確認することになる為、average_scoreは80未満かつ65以上(上図の水色部分)となります。
同じように、③の部分である「average_score >= 35」の条件だと70や90も含まれますが、average_scoreが65に満たない場合に条件を確認することになる為、average_scoreは65未満かつ35以上(上図のピンク部分)となります。
上記の条件全てに当てはまらない場合に④の部分であるelseが実行される為、elseは35未満(上記図の橙色部分)となります。
【Java】if 練習問題2 サンプルプログラム
2018-02-14 問題追加
以下のプログラム内にはコメントで指示がありますので、コメントの下にプログラミングを行ってください(実行結果も参考にプログラミングしてください)。表示や演算には作成した変数を利用して下さい。workフォルダ内に「Exam0801.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
プログラム 解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
class Exam0801{ public static void main(String[] args){ /* 自販機を模したプログラム この自販機では500円、100円、50円、10円の硬貨しか扱えないものとし、 お釣りも上記の硬貨を組み合わせたものとなります。 自販機の飲み物は全て160円とします。 */ //投入金額 int entry_amount = 90; System.out.println("投入金額は" + entry_amount + "円です"); /* 条件分岐を利用して以下を表示してください。 投入金額が160円の場合は、 「ドリンクが購入できました【お釣りなし】」と出力 投入金額が160円より多い場合は、 「ドリンクが購入できました【お釣りあり】」と出力 投入金額が160円より少ない場合は、 「金額が足りません」と出力 */ if(entry_amount == 160){ //「ドリンクが購入できました【お釣りなし】」と出力 System.out.println("ドリンクが購入できました【お釣りなし】"); }else if(entry_amount > 160){ //「ドリンクが購入できました【お釣りあり】」と出力 System.out.println("ドリンクが購入できました【お釣りあり】"); }else{ //「金額が足りません」と出力 System.out.println("金額が足りません"); } } } |
実行結果
c:\work>javac Exam0801.java
c:\work>java Exam0801
投入金額は160円です
ドリンクが購入できました【お釣りなし】
c:\work>javac Exam0801.java
c:\work>java Exam0801
投入金額は330円です
ドリンクが購入できました【お釣りあり】
c:\work>javac Exam0801.java
c:\work>java Exam0801
投入金額は90円です
金額が足りません
※2回目のコンパイル及び実行は、entry_amountを330に変更しています
※3回目のコンパイル及び実行は、entry_amountを90に変更しています
if 練習問題2の解説
ポイント 条件分岐
1 2 3 4 5 6 7 8 9 10 |
if(entry_amount == 160){ //「ドリンクが購入できました【お釣りなし】」と出力 System.out.println("ドリンクが購入できました【お釣りなし】"); }else if(entry_amount > 160){ //「ドリンクが購入できました【お釣りあり】」と出力 System.out.println("ドリンクが購入できました【お釣りあり】"); }else{ //「金額が足りません」と出力 System.out.println("金額が足りません"); } |
「entry_amount == 160」の条件は、投入金額が160と等しい場合となっており、ドリンクが購入できます。
次に、「entry_amount == 160」の条件は、投入金額が160よりも大きい場合は購入できてかつお釣りがあります。
上の2つの条件に当てはまらない場合は、投入金額が160よりも小さいとなるので、ドリンクは購入できないことになります。
【Java】if 練習問題2の追加指示 サンプルプログラム
2018-02-14 問題追加
「Exam0801.java」を以下の指示のように編集して下さい。
保存後、コンパイルおよび実行を行ってください。
指示1:お釣りがあるときは、お釣りの金額も表示させてください。
プログラム 解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
class Exam0801{ public static void main(String[] args){ /* 自販機を模したプログラム この自販機では500円、100円、50円、10円の硬貨しか扱えないものとし、 お釣りも上記の硬貨を組み合わせたものとなります。 自販機の飲み物は全て160円とします。 */ //投入金額 int entry_amount = 90; System.out.println("投入金額は" + entry_amount + "円です"); /* 条件で分岐させます。 投入金額が160円の場合は、 「ドリンクが購入できました【お釣りなし】」と出力 投入金額が160円より多い場合は、 「ドリンクが購入できました【お釣りあり】」と出力 投入金額が160円より少ない場合は、 「金額が足りません」と出力 */ if(entry_amount == 160){ //「ドリンクが購入できました【お釣りなし】」と出力 System.out.println("ドリンクが購入できました【お釣りなし】"); }else if(entry_amount > 160){ //「ドリンクが購入できました【お釣りあり】」と出力 System.out.println("ドリンクが購入できました【お釣りあり】"); //お釣りの表示 int change = entry_amount - 160; System.out.println("お釣りは" + change + "円です"); }else{ //「金額が足りません」と出力 System.out.println("金額が足りません"); } } } |
実行結果
c:\work>javac Exam0801.java
c:\work>java Exam0801
投入金額は330円です
ドリンクが購入できました【お釣りあり】
お釣りは170円です
if 練習問題2(追加指示)の解説
ポイント お釣りの表示
1 2 |
int change = entry_amount - 160; System.out.println("お釣りは" + change + "円です"); |
お釣りは投入金額から代金を引いて表示しています。
指示2:お釣りがあるときは、金額表示とともに硬貨の種類と枚数も表示してください。
プログラム 解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
class Exam0801{ public static void main(String[] args){ /* 自販機を模したプログラム この自販機では500円、100円、50円、10円の硬貨しか扱えないものとし、 お釣りも上記の硬貨を組み合わせたものとなります。 自販機の飲み物は全て160円とします。 */ //投入金額 int entry_amount = 710; System.out.println("投入金額は" + entry_amount + "円です"); /* 条件で分岐させます。 投入金額が160円の場合は、 「ドリンクが購入できました【お釣りなし】」と出力 投入金額が160円より多い場合は、 「ドリンクが購入できました【お釣りあり】」と出力 投入金額が160円より少ない場合は、 「金額が足りません」と出力 */ if(entry_amount == 160){ //「ドリンクが購入できました【お釣りなし】」と出力 System.out.println("ドリンクが購入できました【お釣りなし】"); }else if(entry_amount > 160){ //「ドリンクが購入できました【お釣りあり】」と出力 System.out.println("ドリンクが購入できました【お釣りあり】"); //お釣りの表示 int change = entry_amount - 160; System.out.println("お釣りは" + change + "円です"); System.out.println("500円硬貨:" + (change / 500) + "枚"); change = change % 500; System.out.println("100円硬貨:" + (change / 100) + "枚"); change = change % 100; System.out.println(" 50円硬貨:" + (change / 50) + "枚"); change = change % 50; System.out.println(" 10円硬貨:" + (change / 10) + "枚"); }else{ //「金額が足りません」と出力 System.out.println("金額が足りません"); } } } |
実行結果
c:\work>javac Exam0801.java
c:\work>java Exam0801
投入金額は330円です
ドリンクが購入できました【お釣りあり】
お釣りは170円です
500円硬貨:0枚
100円硬貨:1枚
50円硬貨:1枚
10円硬貨:2枚
c:\work>javac Exam0801.java
c:\work>java Exam0801
投入金額は710円です
ドリンクが購入できました【お釣りあり】
お釣りは550円です
500円硬貨:1枚
100円硬貨:0枚
50円硬貨:1枚
10円硬貨:0枚
if 練習問題2(追加指示2)の解説
硬貨の枚数は、お釣りの保存されている変数を利用して以下の計算を行います。
【手順1】
投入金額を500で割ると、500円硬貨の枚数が分かります。その枚数を表示します。
1 |
System.out.println("500円硬貨:" + (change / 500) + "枚"); |
例1(投入金額が650円の場合)
650を500で割ると通常1.3ですが、intの計算では小数が切り捨てられるため、1となります。
例2(投入金額が350円の場合)
350を500で割ると通常0.7ですが、intの計算では小数が切り捨てられるため、0となります。
【手順2】
表示後、変数の数値を500で割った”余り”を求めます。その余りを変数に再度代入します。余りの数値は手順3以降に利用するためのもの、表示には利用しません。
1 |
change = change % 500; |
例1(投入金額が650円の場合)
650を500で割った余りは150となり、500円硬貨が省かれた数値となります。計算後は150が変数に代入されている。
例2(投入金額が350円の場合)
350を500の余りは350となります(500円以下なので)。計算後は350が変数に代入されている。
【手順3以降】
手順2での変数の数値をもとに、手順1と2を100円硬貨、50円硬貨、10円硬貨の順で行います。
1 2 3 4 5 |
System.out.println("100円硬貨:" + (change / 100) + "枚"); change = change % 100; System.out.println(" 50円硬貨:" + (change / 50) + "枚"); change = change % 50; System.out.println(" 10円硬貨:" + (change / 10) + "枚"); |
【Java】ifと文字列比較 練習問題 サンプルプログラム
以下のプログラム内にはコメントで指示がありますので、コメントの下にプログラミングを行ってください(実行結果も参考にプログラミングしてください)。workフォルダ内に「Exam09.java」で保存してください。
保存後、コンパイルおよび実行を行ってください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
class Exam09{ public static void main(String[] args){ /* 以下の変数を作成してください 型:String 変数名:user_name 初期値:"admin" 型:String 変数名:password 初期値:"javaru" */ String user_name = "admin"; String password = "javaru"; /* 以下のifを作成して下さい ユーザー名が「admin」、パスワードが「Javaru」の場合、 「ログイン」と表示する。 ユーザー名とパスワードが片方でも違う場合、 「ユーザー名かパスワードが間違っています」と表示してください。 */ if(user_name.equals("admin") && password.equals("Javaru")){ System.out.println("ログイン"); }else{ System.out.println("ユーザー名かパスワードが間違っています"); } } } |
実行結果
c:\work>javac Exam09.java
c:\work>java Exam09
ユーザー名かパスワードが間違っています
ifと文字列比較 練習問題の解説
ポイント 文字列比較とAND演算
1 |
if(user_name.equals("admin") && password.equals("Javaru")){ |
「user_name.equals(“admin”)」という条件と「password.equals(“Javaru”)」という条件の両方があっている場合を記述するにはAND演算を利用します。また、elseはその逆となり、片方でも間違っている場合となるため、片方でも間違っている場合の条件を作成する必要はありません。