• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コードの解説をお願い致します。)

クラスMyToolのメソッドの解説と2重forループによる配列クリア方法

このQ&Aのポイント
  • クラスMyToolのメソッドは、継承した親クラスのclearメソッドを利用して、2次元配列を1次元配列ごとにクリアする。
  • 2重forループを使った場合、2次元配列の各要素に対して繰り返し処理を行い、1次元配列をクリアすることができる。
  • ゼロでクリアした配列要素を全て表示するコードは、forループを使用して配列の要素を順番に出力することで実現できる。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.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等を使って。

taro_11
質問者

お礼

返信が大変遅くなり申し訳ございません。 丁寧な解説をありがとうございました。