这个问题由 4 个不同的类组成。问题是:
- 运算符“<”不能应用于“T”和“int”类型的操作数。
- 无法将类型“T”隐式转换为“int”。这是在 min 方法中。
在我看来, list[i] 是我需要比较的具体内容。如果我删除列表 [i] 并用它替换它只i
会给我 1000。如果我删除if (item.Equals(list[i]))
它给我 0。
但是我可以将数字添加到该整数中,如果该数字大于最小值(为 2),它会识别或看到数字 2。最后一部分可能没有多大意义,也很难解释。
我可以比较什么或如何给我最小整数?我错过了什么小东西还是很大的东西?list[i] 是我需要比较的吗?
我仍然遇到的问题是,当我尝试进行比较时,它不能识别 T在类参数中)
我想也许
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++;
}
}
}