この問題は 4 つの異なるクラスで構成されています。問題はそれです:
- 演算子「<」は、タイプ「T」および「int」のオペランドには適用できません。
- 型 'T' を 'int' に暗黙的に変換することはできません。これは min メソッドにあります。
リスト[i]は、特に比較する必要があるものであるように思えます。リスト[i]を削除してそれに置き換えると、i
1000にif (item.Equals(list[i]))
なります。削除すると、0になります。
しかし、私はその整数に数字を加算することができ、数字が最小 (2) よりも大きい場合、数字 2 を認識または認識します。最後の部分はあまり意味をなさない可能性があり、説明が難しい場合があります。
最小の整数を得るために何を、またはどのように比較できますか? 何か小さいものを見逃しているのでしょうか、それとも非常に大きなものでしょうか? list[i] は比較する必要がありますか?
私がまだ抱えている問題は、比較を行おうとすると、比較で T が認識されないことです。クラス パラメーターでそれを宣言すると、他のクラスで多くの頭痛の種が発生します (また、通常は IComparable も表示されません)。クラスパラメータで)
たぶんと思った
public int min(ref T item)
{
int min = 1000;
T tempItem = list[0];
for (int i = 0; i < next; i++)
{
if (list[i].CompareTo(tempItem) < 0)
{
tempItem = list[i];
min = i;
}
}
item = tempItem;
return min;
}
うまくいきますが、まだうまくいきません。この問題は、CompareTo の問題に更新されています。
using System;
namespace ArrayListNamespace
{
public abstract class ArrayList<T>
{
protected T[] list;
protected int length;
public ArrayList()
{
list = new T[100];
length = 0;
}
public abstract void insert(ref T item);
public int remove(ref T item)
{
if (length == 0) return 0;
else
{
//find value, if it exists
for (int i = 0; i < length; i++)
{
if (item.Equals(list[i]))
{
list[i] = list[length - 1];
length--;
return 1;
}
}
return -1;
}
}
public void print()
{
for (int i = 0; i < length; i++)
{
Console.WriteLine(list[i]);
}
}
public void removeAll(ref T item)
{
for (; ; )
{
int r = remove(ref item);
if (r == -1) break;
}
}
public void removeAt(int location) // probably can delete this
{
list[location] = list[length - 1];
length--;
}
public int min(ref T item)
{
int min = 1000;
for (int i = 0; i < length; i++)
{
if (list[i] < min)
{
min = list[i];
}
}
return min;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnorderedArrayListNamespace;
namespace test
{
class Program
{
static void Main(string[] args)
{
UnorderedArrayList<int> u = new UnorderedArrayList<int>();
u.print();
int var = 5;
u.insert(ref var);
u.insert(ref var);
var = 12;
u.insert(ref var);
var = 2;
u.insert(ref var);
var = 29;
u.insert(ref var);
u.print();
Console.WriteLine();
var = 5;
u.removeAll(ref var);
u.print();
Console.WriteLine("The min value is " + u.min(ref var));
}
}
}
using System;
namespace ArrayListADTNamespace
{
public interface ArrayListADT<T>
{
// insert() method places one item in the list
void insert(ref T item);
// remove() method removes first instance of item in list
int remove(ref T item);
// print() method prints all items in list
void print();
// removal all method
void removeAll(ref T item);
// min method
int min(ref T item);
}
}
using System;
using ArrayListNamespace;
using ArrayListADTNamespace;
namespace UnorderedArrayListNamespace
{
public class UnorderedArrayList<T> : ArrayList<T>, ArrayListADT<T>
{
public UnorderedArrayList()
{
}
public override void insert(ref T item)
{
list[length] = item;
length++;
}
}
}