![]() |
||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
<<4.クラスの基礎の目次 | ![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
問題4(難易度:1) 2004年11月12日 | ![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
|
![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
解説 順に見ていきましょう。 まずAは、アクセス指定が「public」と「protected」二つあり、エラーになります。 次にBは問題ありません。メソッド名と仮引数名は同じですが、使われる場所が異なるためコンパイラも区別できるので、同名のものでもかまいません。 Cは仮引数のところに「void」の指定があるのでエラーです。仮引数がひとつもない場合は、括弧のみで中には何も指定しません。 Dはメソッド名に「do」が使ってあり、これはJavaのキーワードでどの名前にも使えません。 Eは問題ありません。 解答 B E 参考 読み物Java 第9章 賢い長方形 |
![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
問題5(難易度:1) 2004年11月12日 | ![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
|
![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
解説 Aでは仮引数xはlong型なので、returnではlongの値を返そうとしています。一方、戻り値の型は「int」になっていて、一致していません。この場合、代入と同じ規則が適用されます。覚えていますか?拡大変換(→2.演算子と制御文 問題10)はOKだけど、逆は許されませんでしたね。longからintへの変換は拡大変換ではありませんので、コンパイルエラーになります。 BはAの逆で、return文ではintの値を返そうとしています。戻り値の型はlongの指定なので、intからlongに問題なく拡大変換されます。 CのcharAtは文字列の中から1文字取り出すメソッドです。引数は0なので、strの先頭文字が取り出されます。戻り値の型は1文字格納できるcharなので問題ありません。 Dのreturn文の式は、”A”が文字列なので、「2」が文字列”2”に変換され、文字列の+、つまり連結され”A2”になります。戻り値の型もStringなのでOKです。 Eのreturn文には式の指定がありません。一方戻り値の型はintになっているので、何も返さないのは許されず、エラーになります。ちなみに戻り値の型が次のようにvoidであればOKです。さらにちなみに下のreturn文はなくてもOKです。 void foo5() { return; } 解答 B C D 参考 読み物Java 第9章 賢い長方形 |
![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
<<4.クラスの基礎の目次|次問題>> | ![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
問題7(難易度:1) 2004年11月13日 | ![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
|
![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
解説 クラスをテストするとき、メソッドmainをそのクラスの中に入れて、そこで自分自身のオブジェクトを作り、他のメソッドのテストをすると、わざわざmainだけ含むクラスを作成しなくて済むので楽です。ここではそのやり方を使っています。mainを別クラスにした場合と中身は同じです。 問題5で、returnの式の値の型と、戻り値の型として指定したものの関係をやりました。拡大変換(→2.演算子と制御文 問題10)ならばOKでしたね。今度は実引数の値の型と、仮引数の型の関係です。ここも拡大変換ならばOKです。(問題5とちがい代入可能ならOKとは言ってないのです。次の問題で明らかになりますが、ここまで意地悪な問題出るかなぁ...) ではAから見ていきましょう。呼び出しの実引数は、メソッド1行目の仮引数と図のように一対一に対応します。最初の実引数’a’はchar型なので、1番目の仮引数のint型に拡大変換できます。2番目はfloat型の定数です。これは2番目の仮引数にそのまま代入できます。よってAは○。 次はB、第一実引数はshort型、これはintに変換可能、第二実引数は0.1で「f」も「F」も付かない小数点つきの数なので、double型の定数になり、これはfloatには拡大変換できません。よって×。 Cは第二実引数がchar型の定数で、float型に拡大変換できるので○。 Dは第一実引数が「L」の付いたlong型の定数なので、int型に拡大変換できず×。 Eの第二実引数はint型の定数で、floatに拡大変換できるので○。 解答 A C E 参考 読み物Java 第9章 賢い長方形 |
![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
問題8(難易度:3) 2004年11月14日 | ![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
|
![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
解説 まずメソッドbooのreturnで返す値の型を調べましょう。sはshort、bはbyteなので、加算の前に二つの値がintに自動的に変換されて結果もintになります。戻り値の型の指定もintなので、ここは問題なくコンパイラを通ります。 次は呼び出し側です。7行目と8行目については、int型の定数を、char、byte、shortのいずれかの変数に代入するのは、拡大変換でないが例外的にコンパイラが許してくれました。(→2.演算子と制御文 問題10)よってCは間違え。 9行目の実引数は、shortとbyteなので、仮引数の型と一致し問題ありません。 10行目も、この流れで行くとOKのような感じです。ところがいけません。7行目や8行目のような代入時の例外は、実引数から仮引数への変換については適用されないのです。実引数がintの定数なので、仮引数のshortやbyteに変換できず、コンパイルエラーになります。問題7で、「拡大変換可能ならOK」だが、「代入可能ならOK」とは言わなかったのは、この例外が引っかかったためです。でもここまで細かいことを気にしていると、白髪が増えそう。大体コンパイラが文句を言ってくれるので、ああそうかで済むことですものね。 解答 E <<4.クラスの基礎の目次|次問題>> |
![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||
Copyright (c) 2004 Nagi Imai All Rights Reserved.. | ![]() |
|||||||||||||||||||||||||||||||||||||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |