0

注: このプログラムから無関係なコードをすべて削除しました。

1 つのプロジェクト内に複数の CS ファイルがあります。私はこのプロジェクトをほぼ完了しましたが、最大値(および最小値ですが、これと同じになるため、それを取り出しました)に対して、void を返します(「return」の下に赤い波線が表示されます)。オブジェクトを正しく初期化しているように感じますが、そうではないようです。1 つの CS ファイルに値がハードコードされた配列があります。

      static void Main(string[] args)
      {
          UnorderedArrayList<int> u = new UnorderedArrayList<int>();
          Console.WriteLine("This is the original list");
          u.print();
          int var = 5;
          u.insert(ref var);
          var = 12;
          u.insert(ref var);
          var = 2;
          u.insert(ref var);
          var = 29;
          u.insert(ref var);
          var = 40;
          u.insert(ref var);
          var = 5;
          u.insert(ref var);
          var = 58;
          u.insert(ref var);
          u.print();
          var = 5;
          Console.WriteLine("********");
          Console.WriteLine("Max Number:");
          u.returnMax(ref var);
          u.print();
      }

そして、別の CS ファイルには次のメソッドがあります。

      public override void insert(ref T item)
      {
          list[next] = item;
          next++;
      }

      public override void returnMax(ref T item)
      {
          dynamic max = list[0];
          for (int i = 0; i < list.Count() - 1; i++)

          {
              if (list[i] > max)
                    max = list[i];
          }
          return max;

さらに、もう 1 つの CS ファイルには、抽象メソッドがあります。

  public abstract class ArrayList<T>
  {
      protected T[] list;
      protected int next;
      public ArrayList()
      {
          list = new T[100];
          next = 0;
      }
      public abstract void returnMax(ref T item);
      public void print()
      {
          for (int i = 0; i < next; i++)
          {
              Console.WriteLine(list[i]);

          }
      }

私がまったく問題を抱えている唯一の部分は、2番目の部分の「最大値を返す」です。これは、nullを返すためです。明らかに、オブジェクト「max」を正しく初期化していません。どんな助けでも大歓迎です。私は自分が何を間違っているのかを本当に理解したいと思っています。

4

2 に答える 2

0

ref通り過ぎてはいけないときにすべてを通り過ぎているという事実を無視した答えを出します。それは絶対に見直してください。

Tまず、 from ..から戻る必要があり、 typereturnMaxに設定する必要もあります。これを行うと、コンパイラは「演算子 > を T 型に適用できません」のようなエラーを表示します。これは、代わりにデフォルトの比較子を使用することで修正されます。これは次のようになります。maxTreturnMax

public override T returnMax(ref T item)
{
    T max = list[0];
    Comparer<T> comparer = Comparer<T>.Default;
    for (int i = 0; i < list.Count() - 1; i++)
    {
        if (comparer.Compare(list[i], max) > 0)
            max = list[i];
    }
    return max;
}

ベースの戻り値の型も必ず変更してください。次に、これを行うことができます:

int max = u.returnMax(ref var); // "max" contains the maximum.
于 2013-09-26T01:28:17.667 に答える