こうしろうがJavaの勉強をするのに良い教材はないかと探していたら,関西の大学の院生さんが,学生にプログラミングを教えるために開いているサイトを見つけた。初歩から解説されていて練習問題もあるので,プログラミングの基本を思い出すためにもよいかと思い薦めた。

 こうしろうはまず,変数と型のページでJavaにはint,long,float,double,charなどの型があることを学ぶ。これらは基本データ型とか組み込み型と呼ばれる型である。
 次に変数の使い方がおかしいコードをEclipseで入力し,Eclipseがどのようにエラーを指摘してくれるか確認した。

----------------------------------------------------------

public class rensyu1 {
 public static void main(String[] args) {
  int i;
  double d;
  i = 0;
  System.out.println("i" + i);
  System.out.println("d = " + d);
  i = 10;
  System.out.println("i " + i);
 }
}

----------------------------------------------------------
 間違いは,double型の変数dに値を与えないで,System.out.printlnで表示しようとしているところだ。

 実行すると,エラーがあることを示すダイアログが表示され,OKをクリックすると上記の画面になる。コンソールにメッセージが表示され,該当の行は警告アイコンでマーキングされている。

 警告アイコンをクリックすると,どう直せばよいのか教えてくれる。「いっけまっついでもないがに,気の毒なはや」という気分になった(富山弁解説 いっけまっついでもないがに,気の毒なはやは感謝の意を表す富山弁でもウルトラCに分類できるセンテンス。「いっけまっつい」は血縁の薄い親類を表す。「気の毒なはや」はありがとうや恐縮ですの意。はやに特に意味はなかろう。「他人なのに,気を遣ってくれてありがとう」と感謝したいときに使うが,使い手は稀少だ)。

 次にこうしろうは,演算子をザッと眺める。「C言語とほとんど同じやろう」と背中に声をかけ,制御構造に進む。これもC言語とほぼ同じなので,ページの最後にある練習問題に進む。

 ある値があって,それが偶数なら偶数,奇数なら奇数と表示するプログラムを作りなさいという問題である。

 ある数が奇数か偶数かを調べるためには,2の剰余を取ればよい。プログラマなら脊椎反射で出てくる答えであるが,これがなかなか出てこない。「うーん」と頭をひねっている。なぜかと思うと先ほど勉強した演算子のページには剰余演算子が出てなかったのだ。わざとなのだろうか。
----------------------------------------------------------

public static void main(String[] args) {
 int i;
 i=12;
 if (( i % 2) ==0 ) {
  System.out.println("even");
 }
 else {
  System.out.println("odds");
 }
}

----------------------------------------------------------
こんなプログラムになる。%が剰余演算子だ。i % 2はiの値を2で割った余りを求める。まだまだ,覚えなくてはいけない基礎がたくさんあるようだ。

 次に,繰返し構造について説明してあるページに進む。これもC言語と大変わりしないので,さっと読んで,練習問題に進む。

 まず,こんにちは\(^ ^)\    こんにちは\(^ ^)\を10行表示せよという問題に取り組む。
----------------------------------------------------------

public static void main(String[] args) {
 int i;
 for (i=0;i <10;i++) {
  System.out.print("こんにちは\\(^ ^)\\");
  System.out.print("\t\t");
  System.out.println("こんにちは\\(^ ^)\\");
 }
}

----------------------------------------------------------
 このようなプログラムになるだろう。for文でループを作るところがメインの問題で,エスケープ文字である\を表示するには\\と\を二つ続けなければいけないことやタブは\tと表記するといった知識も問われる。このあたりはサッサとこなす。知識は身についているようだ。

 次の0 1 2 3 4 5 6 7 8 9と出力するプログラムを作ってくださいという問題も同様にforループを使って簡単にプログラミングした。
 困ったのはこのプログラムの発展で,0 1 2 3 4 5 6 7 8 9の順ではなく,5 6 7 8 9 0 1 2 3 4の順で表示せよという問題だ。「うーん」としばらく黙り込んだ後で,「一つのforループでせんなんがけ?」と聞く。5,6,7,8,9と出力するforループと0,1,2,3,4と出力するforループを作れば簡単だと考えたようだ。「二つに分けるのは無駄だからダメ」と言うと,今度は本格的に黙り込んでしまった。
 5から始めて,9の次が0になるようにするにはどうすればよいかというテーマだ。「正の整数の2の剰余を取ると0と1という2つの値が返ってくるのだから,0から9の10個の値がほしいときはどうすればいいが?」と待ちきれずアドバイスする。
----------------------------------------------------------

public static void main(String[] args) {
 int i;
 for (i=5;i<15;i++) {
  System.out.print(i%10+" ");
 }
}

----------------------------------------------------------
 i=5から始めて,15より小さい間,iの10の剰余を取れば簡単に実現できる。剰余演算は意外と使えるのだ。

 院生さんのページに感謝して,今日はここまで。