レポート課題3 よくある質問(FAQ)
レポート課題3に関して、だんだん質問が増えてきたので、よくある質問とその回答を掲載します。
質問 |
javac Report3.java とタイプしたところ、cannot read Report3.java というエラーになりました。何がいけないのでしょうか? |
|---|---|
回答 |
ソースファイル Report3.java がカレントディレクトリにない場合、このエラーが起こります。Report3.javaがカレントディレクトリにあることを確認し、 |
質問 |
javac Report3.java とタイプしたところ、エラーが出ず、コンパイルは問題なくできます。しかし、java Report3とタイプして実行しようとすると、Exception in thread "main" java.lang.NoClassDefFoundError: Report3というエラーが表示されて実行できません。何故でしょうか? |
|---|---|
回答 |
ソースファイル Report3.java には、Report3というクラス |
質問 |
13countという名前の変数を整数型で定義しましたが、コンパイルするとエラーになります。 |
|---|---|
回答 |
Javaでは数字から始まる変数名を使えません。変数名には、英字、アンダースコア(_)、ドルマーク($)から始まり英数字とアンダースコアとドルマークを含む文字列が使えます。 また、 <Javaにおける予約語の例>
|
質問 |
java Report3 とタイプしたところ、画面が止まってしまったようになり、いくら待っても実行結果が表示されません。あるいは、Unixのcalコマンドで結果を確かめてみると、正しくない実行結果が表示されます。何がいけないのでしょうか? |
|---|---|
回答 |
この現象が起きている人は、繰り返しの使い方に問題があると思われます。下の(間違いのある)ソースコードを見てみましょう。
int year=2005;
int month;
int day=13;
for(month=1;month<=12;month++)
{
if (month<=2) {month=month+12; year=year-1;} // 繰り返しの変数monthが変更されている
int r= (year+year/4-year/100+year/400+(13*month+8)/5+day) % 7;
}
ここで繰り返しには (また、このとき このように、(monthのような)繰り返しを定義する変数の値が、繰り返し処理の中で変更されてしまうと、繰り返しが正常に実行されません。
講義で紹介したZeller3.javaの例を見るとわかると思いますが、上記の間違いを正すためには、
int y=2005;
int m;
int d=13;
for(m=1;m<=12;m++)
{
int year = y;
int day = d;
int month = m;
if (month<=2) {month=month+12; year=year-1;}
int r= (year+year/4-year/100+year/400+(13*month+8)/5+day) % 7;
}
こうすれば、繰り返しを定義する変数 |
質問 |
講義で説明があったZeller3.javaのソースコードや講義資料にあるプログラムのソースコードの一部は使っても良いのでしょうか? |
|---|---|
回答 |
はい。課題の設問1にはZeller3.javaのソースコードが役に立つと思います。講義資料にあるものであればいくら転用しても構いません。 |
質問 |
Zeller3.javaにはusage()というメソッドがありますが、これはどういう意味ですか?課題の解答にusage()メソッドを含める必要がありますか? |
|---|---|
回答 |
usage()は、必要ありません。Zeller3.javaをもとにして、課題を解く場合は、
public static void usage()
{
System.out.println("usage: Zeller3
という部分と、
if (argv.length!=1)
{
usage();
return;
}
という部分を削除してください。また、それに続く、(1)
|
質問 |
Javaのプログラミングは難しすぎます。もう何時間も費やしているのにできません。どうしたらいいですか? |
|---|---|
回答 |
課題を解いていて、何か問題にぶつかったら、メールで質問をしてください。他の人もたくさん質問しています。その際に、ソースコードも添付してくれると詳細なアドバイスができます。 |