此問題的陣列找出一個值由4層不同的類。問題是:在由4個不同類別
- 運算符'<'不能應用於'T'和'int'類型的操作數。
- 不能將類型'T'隱式轉換爲'int'。這是最小的方法。
在我看來,列表[i]就是我特別需要比較的東西。如果我刪除列表[i]並將其替換爲i
它只是給我1000.如果我刪除if (item.Equals(list[i]))
它給我0.
但我可以將數字添加到該整數,如果數字大於最小2)它承認或看到數字2.最後一部分可能沒有多大意義,很難解釋。
什麼或如何我可以比較給我的最小整數?我錯過了一些小事還是非常大的事?列表[我]什麼我需要甚至比較?
我仍然存在的問題是,當我嘗試進行比較時,它不能識別比較中的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++;
}
}
}
僅供參考,你不應該需要用'ref'傳遞值。 –
您是否允許作爲ValueType作弊並在T上添加約束? –
@ErikNoren,你會如何建議他這樣做? –