2012-03-07 6 views
0

私は学校で課題のカスタムジェネリッククラスを作成しています。私は現時点で立ち往生しており、次のようなエラーで大いに助けていただきたいと思います。カスタムジェネリッククラス、メソッド名が必要です

パラメータobjを配列に追加しています。問題はobjが決して変更されないということです。したがって、配列内のすべてのインデックスを "ケーキ"しているオブジェクトがケーキと言うでしょうし、他の文字列と同じではありません。

class minlist<T> 
{ 
    T[] storage = new T[3]; 

public void Add(T obj) 
    { 
     if (storage.Length != 3) 
     { 
      storage[0] = obj; 
      storage[1] = obj; 
      storage[2] = obj; 
      storage[3] = obj; 
     } 

私はobjを配列として作成すると問題が解決すると考えました。したがって、別のインデックスの各文字列をソートすることができます。私はケーキを0に、パイは1などに入れます。

私はpublic void add(T obj)のパラメータを編集してパブリックvoid add(T [ ] obj)

また、objのインデックスを追加しています。私は、それは通常、addメソッドで変更されたパラメータを使用せずに、次のようになり、リストに何かを追加したいメインで

  storage[0] = obj[0]; 
      storage[1] = obj[1]; 
      storage[2] = obj[2]; 
      storage[3] = obj[3]; 

 minlist<authorinfo> aif = new minlist<authorinfo>(); 
     aif.Add(new authorinfo("The Count of Monte Cristo","Alexandre", "Dumas", 1844)); 

addパラメータを[] objに変更すると、mainで次のことを行う必要があります。

 minlist<authorinfo> aif = new minlist<authorinfo>(); 
     aif.Add(new authorinfo[0]("The Count of Monte Cristo","Alexandre", "Dumas", 1844)); 

ここでの問題は、[0]が機能しないことです。メソッド名が期待されるエラーが表示されます。何をすべきかわからない。

ご質問が混乱している場合は申し訳ありません。

+0

これは 'authorinfo'のクラス定義と関係します。最初のものが動作し、2番目のものが最初のものを使用しない場合、いいえ? – MoonKnight

答えて

1

クラスを再構成する必要があります。単一のauthorinfoauthorinfoの配列ではありません。

あなたのaddメソッドは単一の項目を受け入れます。あなたは次の空の項目の位置を追跡する場合は、あなたのリストを作成することができます。

class MinList<T> 
    { 
     T[] items; 
     int position; 
     public MinList() 
     { 
      items = new T[3]; 
      position = 0; 
     } 

     public void Add(T item) 
     { 
      items[position] = item; 
      position++; 
     } 
    } 
+0

ありがとう、私は非常に乱雑です。私はそれをきれいにするつもりでした。 ^^ – saturn

0

あなたminlistクラスには、のオブジェクトを保持している - あなたのサンプルの場合には - authorinfoを。リストクラスの各エントリは1つのauthorinfoオブジェクトでなければなりません - OK?

だからあなたの最初のサンプルは、それを呼び出すための正しい:

aif.Add(new authorinfo("The Count of Monte Cristo","Alexandre", "Dumas", 1844)); 

(目的を開始するために、あなたがこのようにすることを書いた場合視覚化する方が簡単かもしれません:

authorinfo info = new authorinfo("The Count of Monte Cristo","Alexandre", "Dumas", 1844); 
aif.Add(info); 

は、それが明確にあなたのことをします単一のオブジェクトを追加しています)。

オブジェクトの配列ではなく、1つのオブジェクトを追加しているので、宣言されたメソッドの最初の試行は正しい:

public void Add(T obj) 

問題は今アイテムを保存する方法です。固定配列長を使用しているため、これまで保管されていたアイテムの数を知る方法がないため、実際に保管されているアイテムの数をクラス内で維持する必要があります。 0の場合は、アイテムを次の空きインデックスとして使用してアイテムを格納し、次の時間のために準備します。

これを実行することができれば、次の問題は...ユーザーが固定配列よりも多くの項目を追加しようとするとどうなりますか?これは課題なので、試して作業しておきます。

希望に役立ちます。

+0

ありがとう、ありがとう。 – saturn