[A] やってみると分かると思いますが、「そのまま」では一つのプログラムに 書くことは出来ませんね。でも、課題 10.1 では public class Kamoku の "public" を取ってしまって,
class Kamoku { String namae; int tensuu; ...のようにして、List 10-4 の KamokuHeikin.java の中に書いて、一つの ファイルにすることが出来ます。授業ではちゃんとやらなかったのですけど、 class とか メソッドには, public か private のどちらかにすることができます。 これらは、アクセス指定子 (access specifier) と呼ばれるものです。 上の Kamoku クラスのようにアクセス指定子を省略すると、デフォルトの private が指定されます。public にしたかったら、別のファイルに書かなければ ならないみたいですが、この課題の場合はそうする必要はないみたいです。
アクセスの指定は、「情報の隠蔽」と呼ばれるオブジェクト指向プログラミングの 一つのテーマに関わることです。
[A]
for (int i=0; i<data.length ; i++) { for (int j=i; j<data.length ; j++) { if (data[i] > data[j]) {
ここの、i を動かす for ループでは、「i 番目に小さい要素を見付ける」 ということをやっている。
1 番目に小さい要素を見つけて、ここまでやれば、もう最後の1回はやらなくても、最後の場所に はいっているので、やらなくても良い。(やっても同じ。) 計算の効率を考えるのであれば、最後の一回はやらない方が速い。
君の場合は、j=i としているけど、教科書のように, j=i+1 とやっても良い。どちらも同じ結果を得るのであるが、 効率という観点からは, j=i+1 とした方が良い。
[A] 小数点以下を四捨五入して整数にするということだったら、 例えば、x が整数型変数で、y が double 型変数のときには、
x = (int)y;って書けば良い。
[A] 識別子っていうのは、メソッド の名前や、変数の名前、クラスの名前などの「名前」のことです。 それならどうして、単に名前と呼ばないのかって聞かれてしまいそうです けど、学問ってそういうものです。 ちなみに英語では, identifier といいます。identifier のほうが よっぽど簡単に聞こえるのは私だけでしょうか?
[A] import ね。自分が書いた Java のプログラム以外のファイルで 定義されているメソッドなんかを使えるようにするために、その メソッドが定義されているクラスを呼び出す命令文です。
[A] 2 づつ加算するときは、i = i+2 と書きます。例えば、
for (int i=0; i< 100; i=i+2) { System.out.println(i); }と書きます。
[A] 残念ながら、簡単にはできません。
Java の最新 version の JDK 1.2 ですと、出力するときの小数点以下の 桁数の指定が結構簡単にやれるみたいなんですがです。ところが, mars群に入ってるのはちょっと古い JDK 1.1 です。(もっと古いのは 1.0。) がまんして下さい。
今日は何曜日ですか? 1、月 2、火 3、水 そこで、「2」と答えて、javaが、どんな天気ですか?と言ってきて、 A、晴れ B,曇り C,雨 D,嵐 のうち、Cを選択すると、傘は持ってますかと聞いてくるような文・・・[A] 2重の入れ子になった、switch 文を使えば良い。つまり、この場合は 最初の swith 文 の case 2 の中にもうひとつの switch 文があるような文。
switch (c) { //外側の switch 文 case 1: ... ... break; case 2: //場合 2 System.out.println("どんな天気ですか?"); System.out.println("A: 晴れ"); System.out.println("B: 曇り"); System.out.println("C: 雨"); System.out.println("D: 嵐"); line = reader.readLine(); char d = line.charAt(0); switch (d) { //内側の switch 文 case 'A': ... break; case 'B': ... break; case 'C': System.out.println("傘は持ってますか?"); break; case 'D': ... break; default: ... break; } //内側の switch 文の終わり break; // 場合 2 の終わり case 3: ... break; default: ... break; } //外側の switch 文の終わり
こんな感じです。このように、これまでに習った構文を複雑に 組合せることが出来ます。プログラムが複雑になると、 当然エラーも多くなります。エラーを少なくするためには、 「字下げ」と「コメント」を効果的に使って、プログラムを 読み易くすることが大事です。
それは出来ます! そのためには、来週 (第6章) と再来週 (第7章) で 勉強する「for 文」か「while 文」を使うので、ちゃんと聞いていて 下さい。来週にはその目的が達成できるようになるでしょう。
「if 文を使うよりも switch 文を使った方がプログラムが 読みやすくなる場合もある」というのが 本当です。もう一つの利点は、教科書の p. 119 にも書いてあるように、 switch 文の方が if 文よりも高速に実行できるのだそうです。まあ、その スピードの差はたいした違いではないのでしょうけど。
それよりも、switch 文は「整数か文字でしか分岐できない」という 短所がありますし、switch 文でできることは全て if 文でも出来るので、 switch 文を知らなくてもプログラムは書けるんですよ、実は。
String line = reader.readLine(); double weight = Double.valueOf(line).doubleValue();とすれば、良いでしょう。一応説明すると、最初の行で とりあえず、入力を文字列として line 変数に読み込んで、そのあとで line 変数に入っている文字列を double 型の小数に変換したあと、 double 型の変数 weight に代入します。
もちろん、2番目の行の右辺はまだ理解できなくてもいいです。 「おまじない」と思っていましょう。
try { String line = reader.readLine(); int n = Integer.parseInt(line); } catch (IOException e) { System.out.println(e); } catch (NumberFormatException e) { System.out.println("数字の形式が正しくありません。"); }というようなプログラムがあったとしましょう。 try { ... } において例外 (excetion、エラー) が発生するとします。 とその例外は, try { ... } の外に放り出さ れます。その例外は e という名前の変数と考えて良いです。その変数の 型が、 IOException であったならば最初の catch で 捕まえられて、最初の catch のすぐ後の { .... } が実行され ますし、その例外の型が、NumberFormatException だったら、2番目の catch で捕まえられて、2番目の catch の次の { .... } が実行されます。