- ベストアンサー
クラスMyToolのメソッドの解説と2重forループによる配列クリア方法
- クラスMyToolのメソッドは、継承した親クラスのclearメソッドを利用して、2次元配列を1次元配列ごとにクリアする。
- 2重forループを使った場合、2次元配列の各要素に対して繰り返し処理を行い、1次元配列をクリアすることができる。
- ゼロでクリアした配列要素を全て表示するコードは、forループを使用して配列の要素を順番に出力することで実現できる。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
少し雑に説明するので、正確な内容は、その本なり他の本なりできちんと勉強してください。 継承すると次のことができます。 (1)定義しなおさなければ、親クラスのメソッドがそのまま自クラスのメソッドとして使える (2)親クラスのメソッドを上書きできる(オーバーライド) (3)同じ名前で引数とかが違うメソッドを追加できる(オーバーロード) class myTool extends Tool{ } と、この時点ではただ継承しただけです。 ただ、この時点でも、親から継承したclear(int [])メソッドが使えます。 class myTool { // Toolクラスから継承したclear(int[]) public void clear(int[] n){ for(int i=0; i<n.length; i++){ n[i] = 0; } } } ; こんな風にclear(int[])メソッドが定義してあるようなものです。 このため myTool t = new myTool(); int[]n = { 3,5,9 }; t.clear(n); については、この継承されたメソッドが使用され、問題ありません。 ところが int[][]m = { { 3,2 }, { 9,4,2 } }; t.clear(m); は、MyTool.clearメソッドを呼ぼうとしていますが、引数の型 int[][] に対応したものがありません。そのため、コンパイルエラーになります。 これを解消するために、clearと言うメソッド名は同じだけど、引数が int[] ではなく int[][]のものを定義する(オーバーロード)というのが、問題の主旨です。 なので、正解例では public void clear(int[][] n) を定義しています。 Javaでの二次元配列int[A][B] というのは 「『1行分の1次元配列 int[B]』 を A個持つ配列」 です。 なので、「2次元配列を全てクリアする」→「『各行をクリアする』を全ての行について繰り返す」と考えることができます。 これが、正解例での考え方です。 『各行をクリアする』について、clear(n[i]) を使っています。これは,this.clear(n[i])のことで、int[]が引数なので、今回は、親クラスから継承したメソッドになります。 二重ループで実現するなら、『各行をクリアする』部分を、clearメソッドではなく、ループを使って実現すればいいです。 ヒントは、Toolクラスのclearメソッドです。 二次元配列の中身の表示ですが、上の二重ループができれば簡単です。 クリアするから0を代入するのです。表示したいなら、そのかわりに「表示」させればいいのです。print等を使って。
お礼
返信が大変遅くなり申し訳ございません。 丁寧な解説をありがとうございました。