2017-02-07 9 views
0
public class MyArrayList<T> implements MyList<T>{ 
    int num;  //number of things in the list 
    T[] vals;  //to store the contents 

    @SuppressWarnings("unchecked") 
    public MyArrayList() { 
     num = 0; 
     vals = (T[]) new Object[3]; 
    } 

    public int size() { //returns number of things in the bag 
     return num; 
    } 

    public T get(int index) { //returns the indexth values 
     if((index < 0) || (index >= num)) 
      throw new IndexOutOfBoundsException(); 
     return vals[index]; 
    } 

    @SuppressWarnings("unchecked") 
    public void add(T s) { //adds s to the list 
     if(num == vals.length) { //if array is full, make it bigger 
      T[] temp = (T[]) new Object[vals.length*2]; 
      for(int i=0; i < num; i++) 
       temp[i] = vals[i]; 
      vals = temp; 
     } 
     vals[num] = s; 
     num++; 
    } 

    public boolean contains(T s) { //returns whether s is list 
     for(int i=0; i < num; i++) { //ending condition should be num 
      if(vals[i].equals(s)) { 
       return true; 
      } 
     } 
     return false; 
    } 

    public T getUnique(){ 
     T distinct = null; 
     int count = 0; 
     for (int i=0; i<vals.length; i++){ 
      distinct = vals[i]; 
      for (int j = 0; j<vals.length; j++){ 
      if (vals[j] == vals[i]){ 
       count++; 
      } 
      if (count == 1){ 
       return distinct; 
     } 
     } 
     } 
     if (distinct == null){ 
      throw new IllegalArgumentException(); 
     } 
     return distinct; 
    } 




    public void addBefore(T input, T before){ 
     for (int i = 0; i<vals.length; i++){ 
      T temp = vals[i]; 
      if(temp.equals(before)){ 
       vals[i-1] = input; 

      } 
     } 
    } 


    public void removeLast(T s){ 
     for (int i = vals.length; i>=0;i--){ 
      if (vals[i].equals(s)){ 
       vals[i] = vals[i+1]; 
      } 
     } 
    } 
} 

私はJavaでArrayListを実装しようとしています。私はgetUnique、removeLastおよびaddBeforeメソッドを終了することができませんでした。配列を追加する代わりに値を置き換えているように見えるので、配列でうまく動作しているようには見えません。私が間違っていることを少し助けます。JavaでArrayListを実装する。 getUnique、addBefore、removeLastの操作

答えて

0

addBeforeメソッドでは、インデックスi-1のコンテンツを新しい変数で書き直していますが、追加していません。リストの残りの1つのインデックスを右側に移動する必要があります。また、最初の要素の前に新しい入力を追加しようとすると、クラッシュするはずです。

removeLastでは、2番目から最後の変数を最後のインデックス(2番目から最後=最後)に移動します。最後のインデックスで削除を呼び出すだけでよいはずです。

getUniqueメソッドで一意の要素を返すと仮定します。あなたはほぼそこにいます。ちょうど2番目のサイクルを見てください。そして、vals [i]を保存するためにhelp変数が必要ない場合、vals [i]を返すことができます。

+0

リストの残りの部分を右に動かすにはどうすればよいですか? –

+0

これは簡単なことではなく、要素を追加する新しいリストを作成する必要があります。最初に、追加する要素の前にある要素を追加し、新しい要素を追加して残りの要素を追加します。 – SILL

+0

これで、一時リストを作成してこのように追加することを意味しますか? –

関連する問題