【发布时间】:2016-08-27 19:59:03
【问题描述】:
我必须为我的项目使用计数排序对字母数字数据库进行排序,而我的代码不断给我错误。我有一个 txt 文件,其中存储了字母数字值,例如是 86K4G9F8124。 (txt文件中有10000个随机的)。这是我在 Visual Studio 中的代码(它在 C# 中)并给我一个错误:while (counts[i].CompareTo(f) > 0)。
这里是:
{
ArrayList Data = new ArrayList();
Stopwatch SW = new Stopwatch();
StreamWriter SWr = new StreamWriter("Time.txt");
int j = 100;
while (j != 10000)
{
ReadData(ref Data, j);
SW.Start();
CountingSort(Data);
SW.Stop();
SWr.WriteLine("{0} {1}", j, SW.ElapsedTicks);
Console.WriteLine(j);
SW.Reset();
j = j + 100;
Data.Clear();
}
SWr.Close();
}
static void CountingSort(ArrayList Data)
{
// O(1)
string max, b;
max = (string)Data[0];
// O(N)
for (int i = 0; i < Data.Count; i++)
{
b = (string)Data[i];
if (b.CompareTo(max) > 0)
{
max = b;
}
}
// Space complexity O(N+K)
string counts = (string)Data[0];
string output =(string)Data[Data.Count - 1];
string c;
// O(N)
for (int i = 0; i < Data.Count; i++)
{
c = (string)Data[i];
counts = c;
}
string d;
string e;
string f = " ";
// O(N+K)
for (int i = 0; i < counts.Length; i++)
{
while (counts[i].CompareTo(f) > 0)
{
d = (string)Data[i];
output= d;
e = (string)Data[i--];
counts = e;
}
}
}
static void ReadData(ref ArrayList data, int Times)
{
StreamReader SR = new StreamReader("Data.txt");
for (int i = 0; i < Times; i++)
{
data.Add(SR.ReadLine());
}
SR.Close();
}
请有人帮助我,告诉我哪里出错了,希望能做什么。谢谢!
【问题讨论】:
-
它给出的错误是什么?
counts是一个字符串,当您对它进行索引时,您会返回该索引处的字符,因此很可能错误是您正在比较不兼容的类型。 C# 是静态类型的,f 是字符串,counts 是字符串,counts[i] 是 char,char == string在 C# 中是不允许的,因为它有严格的类型系统。 -
@evanmcdonnal 错误说:mscorlib.dll 中发生了“System.ArgumentException”类型的未处理异常我明白你的意思,但是我怎样才能对字母数字数据进行排序计数呢?谢谢
-
你得到一个参数异常,因为你正在调用这个方法; msdn.microsoft.com/en-us/library/bhh2bx3h(v=vs.110).aspx (或接受和
object作为参数的其他版本)但将其传递给字符串。如果您使用相等运算符 (==),那么您会收到编译器错误,但由于该方法有一个重载接受类型object,它会尝试调用该方法,然后当它意识到它无法将字符串与字符进行比较时抛出。我将发布一个带有微小更改的答案,至少可以解决该问题,但您的逻辑中可能仍有其他问题。
标签: c# visual-studio sorting while-loop counting