](6615aacc2a25cda122814157110001ad.png)
学校の課題でカスタム配列クラスの問題に取り掛かっています。
画像に書かれている事柄をJava言語に置き換える問題です。
以下では、メソッドのindexOfまで作りましたが、その後のremoveメソッドだけ出来ないです。
addメソッドの逆を書けばいいのですが配列要素の切り詰めや削除をどのように書けば良いですか?
public class IntCollector {
private int[] array;
public IntCollector() {
this.array = new int[0];
}
public IntCollector(int[] values) {
/*this.array = new int[values.length];
for(int i = 0; i < values.length; i++){
this.array[i] = values[i];
}*/
this.setArray(values);
}
public int[] getArray() {
return array;
}
public void setArray(int[] values) {
this.array = array;
this.array = new int[values.length];
for (int i = 0; i < values.length; i++) {
this.array[i] = values[i];
}
}
public void add(int value) {
//今現在の配列の要素数+1で新しい配列を作成
int[] newArray = new int[this.array.length + 1];
//今現在の配列の値を全て新しい配列にコピー
for (int i = 0; i < array.length; i++) {
newArray[i] = this.array[i];//this.array[i]:要素を1個足してない状態
}
//新しい配列の末尾に引数の値で要素を追加
newArray[newArray.length - 1] = value;
//新しい配列を今現在の配列とする
this.array = newArray;
}
public int countOf(int value) {
int count = 0;
for (int v : array) {
if (v == value)
count++;
}
public int indexOf ( int value){
for (int i = 0; i < array.length; i++) {
if (array[i] == value)
return i;
}
return -1;
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
0
先生に質問して出た結果です
先生に質問した結果がteratailで聞けとなることはないと思いますが、
きっとaddメソッドの逆を書けばいいといわれたのでしょう。
addメソッドの逆を書けばいいのですが配列要素の切り詰めや削除をどのように書けば良いですか?
切り詰め
addメソッドの逆で、
// 今現在の配列の要素数-1で新しい配列を作成
すればよいです。
削除
削除というよりコピーをしなければ、結果的に削除されたものが作られます。
つまり、
//今現在の配列の値を全て新しい配列にコピー
となっている部分を、
//指定されたindex以外をコピー
と、すればよいです。
注意点としては、指定されたindex以降は位置がずれるので
コピー位置を-1しないと、ArrayIndexOutOfBoundsException が発生します。
投稿
score 2914
-
回答の評価を上げる
以下のような回答は評価を上げましょう
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 89.13%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼