0

そのため、配列と配列メソッドのみからarraySetを作成しようとしています。選択したアイテムのインデックスを見つける次のコードがあります (各メソッドが何をすべきかを理解できるようにコメントを含めました)。ご覧のとおり、アイテムを追加する前に、findIndex メソッドで add メソッドを呼び出します。私が抱えている問題は、findIndex メソッドがエラーを引き起こすことです (戻り値がありません)。コードが見つけたアイテムの int インデックスだけを返すにはどうすればよいですか? (コード内の疑問符は、私が行き詰まっている場所を示すためのものです)

/** Find the index of an element in the dataarray, or -1 if not present
 *  Assumes that the item is not null 
 */
private int findIndex(Object item) {

    for(int i=0; i<data.length;i++){
        if(data[i] == item){
            return i;
        }

    }
  return ???
}


/** Add the specified element to this set (if it is not a duplicate of an element
 *  already in the set).
 *  Will not add the null value (throws an IllegalArgumentException in this case)
 *  Return true if the collection changes, and false if it did not change.
 */
public boolean add(E item) {


    if(item == null){
        throw new IllegalArgumentException();
    }
    else if(contains(item) == true){
        throw new IndexOutOfBoundsException();
    }
    else{

        int index = findIndex(item);
        if(index<0||index>count){
            throw new IndexOutOfBoundsException(); 
       }
        ensureCapacity();
        for(int i=count; i>index; i--){
            data[i]=data[i-1];
        }
        data[index] = item;
        count++;
        return true;
    }
}
4

4 に答える 4

0

ほとんどの場合、コメントで自分の質問に答えました。アイテムが見つからない場合、どの整数を返す必要がありますか? コレクション内の何かに対して有効な値にすることはできません (0 <= x < list.size() と考えてください)。

于 2012-08-13T14:44:58.093 に答える
0

私があなたの質問を正しく理解しているなら、それはちょうどこれでなければなりません.

private int findIndex(Object item) {

  for(int i=0; i<data.length;i++){
    if(data[i] == item){
        return i;
    }
  }
  return -1;
}
于 2012-08-13T14:46:11.413 に答える
0

値を返すように宣言されたメソッドは、値を返すか例外をスローする必要があります。これまでに作成したコードでは、探しているものが実際に見つかった場合にのみ値を返します。探しているものが見つからない場合、メソッドは何をすべきでしょうか? その場合も何かを返す必要があります。

よく行われるのは、おそらくインデックスではない特別な値を返すことです。ヒント: Java で配列インデックスとして使用されない整数の種類は? それらのいずれかを返します。次に、この選択を文書化します。メソッドを呼び出すコードは、この特別な戻り値をチェックして、アイテムが見つかったかどうかを確認する必要があります。

于 2012-08-13T14:47:13.583 に答える
0

return i現在のように、ループの途中に を配置する必要があります。

ただし、if ステートメントに到達しない場合に備えて、return ステートメントも必要です。あなたのコメントは -1 を使うべきだと言っているので、return -1あなたが持っている場所が必要ですreturn ???

于 2012-08-13T14:48:15.447 に答える