【Java】Androidアプリ開発科入校3週間目のわたくしの状況はな、なんとコレ
Androidアプリ開発科(夜間部)入学から3週間弱。
最初の週は、
- 2進法・8進法・16進法の変換
- メモリ管理などOSの役目
- TCPとIPの役割の違いなどネットワークの大まかな考え方
などをやりました。
第2週目前半は
- 課題に対してひたすら紙と鉛筆でチャート図を描き続ける日々。
最初の処理でな、なんと終了してしまうというとんでもないチャート図をたびたび書いては先生を困らせていたわたくし ^^;
そうして2週目後半以降コードを書き始めています。はじめはエディターで。そしていよいよ、Eclipseで(初心者がEclipseばかりでコードを書くと覚えないからアカンと先生はおっしゃってますが)。日々、新たな発見の連続で実に新鮮です!
さて、今日のJAVAの講義。if文・for文・while文を使った練習問題をひたすらもくもくと書くというもの。
「3週間目でまだ太田くんはまだその状態なの…」というツッコミを受けることを覚悟しつつ、その中から2つ例題をご紹介します。あ、どちらもif文です。また、あったはずの字下げはコピペしたときになぜか無くなっちゃってます(謎)。
---------------------------
Q1.国語と算数の得点を入力して判定をしてください。
国語・算数ともに80点以上の場合
「合格」と表示
どちらかが80点以上の場合
「もう少しですね!!」と表示
どちらも79点以下の場合
「もっとがんばりましょう」と表示
【わたしの回答】
package and1107.java.j037;
import java.util.Scanner;
public class ex01 {
public static void main(String args) {
// TODO 自動生成されたメソッド・スタブ
// キーボード入力用オブジェクトを作成
int scoreLang; //国語の変数
int scoreMath; //算数の変数Scanner scan = new Scanner(System.in); //スキャナークラスをインポートでenter
System.out.println("国語の点数を入力してenter keyを押下してください");
scoreLang=scan.nextInt(); //整数入力メソッド。右から左に入れる。System.out.println("算数の点数を入力してenter keyを押下してください");
scoreMath=scan.nextInt(); //整数入力メソッド。右から左に入れる。if (scoreLang >= 80 && scoreMath >= 80) {
System.out.println("合格");}
if (scoreLang < 79 && scoreMath <79) {
System.out.println("もっとがんばりましょう");
} else {
System.out.println("もう少しですね");
}double aver; //国語と算数の平均点
aver = (scoreLang + scoreMath) / 2;
System.out.println("平均点は" + aver +"点です");
}}
【先生の回答例】
package and1107.java.j037;
import java.util.Scanner;
public class Ex01 {
public static void main(String args) {
// TODO 自動生成されたメソッド・スタブScanner scan = new Scanner(System.in);
int scoreMath,scoreLang;
String msg="";
System.out.println("算数の点数を入力してください");
scoreMath=scan.nextInt();
System.out.println("国語の点数を入力してください");
scoreLang=scan.nextInt();if(scoreLang > 100 || scoreMath >100 || scoreLang < 0 || scoreMath < 0 ){
msg="入力範囲は0〜100までの整数です。";
}else if(scoreLang >=80 && scoreMath >=80){
msg="合格";
}else if(scoreLang >=80 || scoreMath >=80){
msg="もう少しですね!!";
}else{
msg="もっとがんばりましょう";
}
System.out.println(msg);}
}
【気づき】
- 0点以下あるいは101点以上の点数を入れられた場合の処理を自分はまるで抜かしてました(´ヘ`;)
- else if をまるで考えてなかった(・_・;)
- String型のmsg変数を使うとコードがすっきりする。
- 逆に言うと、System.out.println(""); がわたしのコードではくどすぎる。
- elseの使い方が先生はエレガント。ちゃんと頭のなかでチャートを整理してコードを書き始めないと。
---------------------------
Q2.1月から12月までの月を入力して、その季節を表示します。
1、2、12月 :冬
3、4、5月 :春
6、7、8月 :夏
9、10、11月 :秋
【わたしの回答】
package and1107.java.j037;
import java.util.Scanner;
public class ex04 {
public static void main(String args) {
// TODO 自動生成されたメソッド・スタブ
Scanner scan = new Scanner(System.in); //スキャナークラスをインポートで作成System.out.println("月を入力してください");
int month=scan.nextInt();//整数入力メソッド。右から左に入る。if (month == 1 || month == 2 || month == 12) {
System.out.println("冬");
} else if (month >=3 && month <= 5){
System.out.println("春");
} else if (month >= 6 && month <= 8) {
System.out.println("夏");
} else if (month >= 9 && month <= 11){
System.out.println("秋");
} if (month >=13 || month < 1) {
System.out.println("正しい月を入力してください");
}
}}
【先生の回答】
package and1107.java.j037;
import java.util.Scanner;
public class Ex04 {
final static int MIN_MONTH =1;
final static int MAX_MONTH =12;public static void main(String args) {
// TODO 自動生成されたメソッド・スタブ
Scanner scan = new Scanner(System.in);
int month;
String seasone="";System.out.println("月を入力してください");
month=scan.nextInt();if(month > 12 || month < 1 ){
seasone="入力範囲は"+MIN_MONTH+"〜"+MAX_MONTH+"までの整数です。";
}else if(month >= 3 && month <=5 ){
seasone="春です!!";
}else if(month >= 6 && month <= 8 ){
seasone="夏です!!";
}else if(month >= 9 && month <= 11 ){
seasone="秋です!!";
}else{
seasone="冬です!!";
}
System.out.println(seasone);
}}
【気づき】
- 名前付き定数(リテラル)をなぜ使うのだろう…と思ったら…
seasone="入力範囲は"+MIN_MONTH+"〜"+MAX_MONTH+"までの整数です。";
- …の部分で「おぉ!」みたいな。暦が宇宙歴などになって15月が登場してもすぐに対応できるヨ(?)というカッコよさ! でも、宇宙暦って…。
- また、先生のコードでは、最初の条件式をきちんと考えて月のチェックをも行っているので冬の実行文部分でエレガント感が。やっぱりチャートを、アルゴリズムを、あたまに描いてからコードを書き始めるのが大切と痛感。
先生が繰り返すのは、数週間後や数か月後に見たときに見やすい(可読性の高い)コードを書く癖を付けよう、というもの。それ以前の部分でモゴモゴやっている自分ですがはやくそういう高みに行きたいものです:-)
……という感じで週5〜6日、夜の学校で学んでいるわたくし。明日も頑張ります!