練習問題

6.4 練習問題

本章で習った内容を元に練習問題を解いてください。

問1 次の設問①~⑤について○か×で答えなさい。

設問
① クラスのメンバであるフィールドとメソッドは、インスタンスメンバまたはクラスメンバに分類することができる。
② インスタンスメンバにはオブジェクトを生成して初めてアクセスが可能になる。
③ インスタンスメソッドからクラスメンバへアクセスは不可能。
④ オブジェクトを生成すると、クラスメンバもオブジェクトに関連付けられる。
⑤ クラスメソッドからインスタンスメンバにアクセス可能。

問2 以下に示すPractice0601.javaのソースコード①~④が、どのように間違っているか答えなさい。

ソースコード

① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch06exercise
③ 名前: Practice0601
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

問3 以下の仕様をもつBook1.javaクラスを定義しなさい。

フィールド変数:アクセス修飾子は全て「private」にする
① クラス変数 int型 count 0で初期化
② インスタンス変数 String型 title 初期化なし
③ インスタンス変数 int型 price 初期化なし
④ インスタンス変数 int型 number 初期化なし

コンストラクタ
引数: String型 title、int型 price
処理: クラス変数のcountをインクリメント(1増やす)します。
引数の値を同一名のフィールド変数にそれぞれ格納します。
フィールド変数numberにクラス変数countの値を代入します。

ソースコード

① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch06exercise
③ 名前: Book1
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

[java] package jp.co.f1.basic.ch06exercise; public class Book1 { //フィールド変数4つ定義 //コンストラクタを定義 } [/java]

問4 問題6-3で作成したBook1.javaに、以下の仕様をもつ2つのメソッドを追加したBook2.javaを作成しなさい。

メソッド仕様: メソッドのアクセス修飾子は全て「public」にする
① メソッド名: showBook(インスタンスメソッド)
戻り値: なし
引数: なし
処理内容: 以下のメッセージを画面に出力する。※title、price、numberはフィールド変数です。
「この本のタイトルはtitle、価格はpriceです。」
「生成番号はnumberです。」

② メソッド名: getCount(クラスメソッド)
戻り値: int型
引数: なし
処理内容: クラス変数countの値をリターンする。

ソースコード

① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch06exercise
③ 名前: Book2

[java] package jp.co.f1.basic.ch06exercise; public class Book2 { //Book1の定義 //showBookメソッドの定義 //getCountメソッドの定義 } [/java]

問5 問4で作成したBook2.javaをコピーしBook3クラスを作成し、以下の実行結果になるようにPractice0602.javaを作成しなさい。

実行結果

Practice0602クラスのmainメソッド仕様

① キーボード入力用のクラスScannerクラスをオブジェクト化する。※2
② 3回ループするfor文を記述する。
③ キーボードから本のタイトルを入力する。※1
④ キーボードから本の価格を入力する。※1
⑤ ③と④で入力した値を引数に、Book3型のオブジェクトを生成する。※1
⑥ Book3型オブジェクトのインスタンスメンバである、showBookメソッドにアクセスする。※1
⑦ Book3クラスメンバであるgetCountメソッドを利用して、画面に本の総生成回数を表示する。※2
※1:②のループ内で処理を行う。 ※2:②のループ外で処理を行う。

ソースコード

① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch06exercise
③ 名前: Practice0602
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

[java] package jp.co.f1.basic.ch06exercise; import java.util.Scanner; class Book3 { // 問題6-4で作成した内容を記述 } public class Practice0602 { public static void main(String[] args) { // ①スキャナークラスをオブジェクト化 // ②3回ループ処理 { // ③タイトルを入力 System.out.print("本のタイトルを入力してください->"); String title = sin.next(); // ④価格を入力 System.out.print("本の価格を入力してください->"); int price = sin.nextInt(); // ⑤キーボード入力から値を引数にBook3オブジェクト生成 // ⑥書籍情報を表示 // 改行する System.out.println(); } // ⑦オブジェクト生成回数を表示 } } [/java]

※ 今回の演習では、本のタイトル入力にnext()メソッドを使用してください。 next()は「空白や改行までのひとまとまりの文字」を取得するメソッドです。
 文字列を読み取るメソッドとしてnextLine()がありますが、今回は使用しないでください。 価格入力のnextInt()と組み合わせてループさせると、入力がスキップされる不具合(Javaの仕様上の挙動)が起きるため、今回は安全なnext()を使います。

NEXT>> 6.5 練習問題 解答