- ベストアンサー
IntArrayクラスのプログラムを組んでいるのですが・・・
javaプログラミングで以下の内容を満たす、IntArrayクラスを作成しています。 ・インスタンス変数 int型の配列data ・コンストラクタ (1)int型の配列を受け取り、そのコピーを内部的に保持する (2)第1引数で指定された要素数を持つ配列を確保し、全ての要素に初期値として第2引数で指定された値をセットする (3)第1引数で指定された要素数を持つ配列を確保し、全ての要素に初期値としてゼロをセットする ・メソッド (1)sort 内部的に保持している配列を、引数の値がtrueであれば昇順、falseであれば降順にソートする (2)length IntArrayが保持している配列の要素数を取得する (3)getElement 引数に指定された要素番号の値を取得する (4)setElement 第1引数に指定された要素番号に第2引数で指定された値を格納する (5)getArray IntArrayが保持している配列のコピーを取得する 実際にプログラムを組んでみたのですが、※の部分が冗長だと指摘を受けました。 しかしどのように修正したらよいかわかりません。 どうかアドバイスなどをよろしくお願いいたします。 package java_Lesson; import java.util.Arrays; /** * int型の配列dataの要素を取得、あるいは操作するクラス */ class IntArray { private int[] data; /** * int型の配列を受け取り、そのコピーを内部的に保持する * * @param args コピー元となる配列 */ IntArray(int[] args) { data = (int[])args.clone(); } /** * 第1引数で指定された要素数を持つ配列を確保し、 * 全ての要素に初期値として第2引数で指定された値をセットする * * @param arg1 配列の要素数 * @param arg2 配列の初期値 */ IntArray(int arg1, int arg2) { this(arg1); /* ※ */ for (int index = 0; arg1 > index; index ++) { data[index] = arg2; } } /** * 第1引数で指定された要素数を持つ配列を確保し、 * 全ての要素に初期値としてゼロをセットする * * @param arg 配列の要素数 */ IntArray(int arg) { data = new int[arg]; } /** * 内部的に保持している配列を昇順、あるいは降順にソートする * * @param arg trueであれば昇順、falseであれば降順にソート */ void sort(boolean arg) { Arrays.sort(data); if (arg) { return; } int array = data.length - 1; for (int index = 0; array > index; index ++, array --) { int temp = data[index]; data[index] = data[array]; data[array] = temp; } } /** * IntArrayが保持している配列の要素数を取得する * * @return 配列の要素数 */ int length() { return data.length; } /** * 引数に指定された要素番号の値を取得する * * @param arg 返す要素の要素番号 * * @return 配列dataの要素番号argの値 */ int getElement(int arg) { return data[arg]; } /** * 第1引数に指定された要素番号に第2引数で指定された値を格納する * * @param arg1 値を格納する要素番号 * @param arg2 配列に格納する値 */ void setElement(int arg1, int arg2) { data[arg1] = arg2; } /** * IntArrayが保持している配列のコピーを取得する * * @return 配列dataのコピー */ int[] getArray() { return data.clone(); } }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
※部? 私は悪くないと思うけど。 特に冗長とは感じないわ。 むしろその指摘をした方に伺い立てたいところね。 この問題がどういう流れで出題されているのかわからないからだけれど もしかしたら、直前に学習したものの中に 指摘をした人が言いたいことがあるのかもしれないわね。 ちょっと違うけど java.util.Arraysをimportしているところを見ると この問題はjava.util.Arraysを使わせる演習なのかしら。 だとするとIntArray(int arg1, int arg2)のfor部は Arrays.fillを使うべきじゃない? とかね。 出題者?指摘者?の意図が どこにあるのかが判れば 判明するかも。 もちろん、ただの指摘ミスもありうるけど。 ちなみに、どうしても※部をなんとか変更するとしたら data = new int[arg1]; こう書き換えるんだと思うわ。 これが正解の場合、次のような理由ね。 変数を1つ初期化するだけだから IntArray(int arg)する必要はない。 むしろ可読性を損ねるだけになる。 他に考え付かないわ。
その他の回答 (1)
- Apr2nd
- ベストアンサー率69% (36/52)
指摘した方の勘違いという線で考えると… ・指摘した方はロジックをちゃんと見ていなかった。 ・※で呼び出しているメソッドのヘッダのコメントを見ると 「全ての要素に初期値としてゼロをセットする」 とある。 ・※のメソッドでは全ての要素に第2引数で指定した値を設定するものなので、 「全要素に第2引数の値をセットするのに一度全要素に0を設定するメソッドを 呼び出す必要はなかろう」と思った。 なんて感じでしょうか。まぁ実際には指摘した方に聞いてみないと何とも言えませんが。 あえて直すのであれば私も#1さんが書かれている通りかと思います。
お礼
IntArray(int arg1, int arg2)のfor文を Arrays.fill(data, arg2);に変えて、 IntArray(int arg)のdata = new int[arg]; をthis(arg, 0);に変えたら合格頂くことができました。 アドバイスありがとうございました。