读书人

C#代码有关问题

发布时间: 2013-07-20 11:07:48 作者: rapoo

C#代码问题
本帖最后由 CJavaer 于 2013-07-16 18:06:11 编辑 斜体indices = new int[1]处,我不明白,为什么要new一个,
粗体indices=new int[count];我知道怎么回事,
但是斜体的代码块只用到indices[0]啊,刚接触不太懂,请高手指教



//函数Maxima
static int Maxima(int[] integers, out int[] indices)
{
Debug.WriteLine("Maximum values search started.");
indices=new int[1];
int maxVal=integers[0];
indices[0]=0;
int count = 1;
Debug.WriteLine(string.Format("Maximum values initialised to {0},at element index 0.", maxVal));
for (int i = 1; i < integers.Length; i++)
{
Debug.WriteLine(string.Format("Now looking at element at index{0}",i));
if (integers > maxVal)
{
maxVal = integers[i];
count = 1;
[i]indices = new int[1];

indices[0] = i;
Debug.WriteLine(string.Format("Now maximun found,Now value is {0},at element index{1}", maxVal, i));
}
else
{


if (integers[i] == maxVal)
{
count++;
int[] oldIndices = indices;
indices=new int[count];
oldIndices.CopyTo(indices,0);
indices[count-1]=i;
Debug.WriteLine(string.Format("Duplicate maximum found at element index {0}",i));
}
}
}
Trace.WriteLine(string.Format("Maximum value {0} found,with {1} occurrences",maxVal,count));
Debug.WriteLine("Maximum values search completed.");
return maxVal;
}

//主程序
int[] testArray = { 4, 7, 4, 2, 7, 3, 7, 8, 3, 9, 1, 9 };
int[] maxValIndices;
int maxVal = Maxima(testArray, out maxValIndices);
Console.WriteLine("Maximum value {0} found at element indices:",maxVal);
foreach (int index in maxValIndices)


{
Console.WriteLine(index);
}
Console.ReadKey();



[解决办法]
indices=new int[1];
indices[0]=0;
其实就是
indices = { 0 };

因为是out修饰的参数,所以必须函数自己去初始化。
[解决办法]
引用:
Quote: 引用:

indices=new int[1];
indices[0]=0;
其实就是
indices = { 0 };

因为是out修饰的参数,所以必须函数自己去初始化。

你好,谢谢你的解答,indices在for循环外面不是初始化了么,
为什么在for循环里面if中还要初始化呢
if (integers[i] > maxVal)
{
maxVal = integers[i];
count = 1;
indices = new int[1];
indices[0] = i;
Debug.WriteLine(string.Format("Now maximun found,Now value is {0},at element index{1}", maxVal, i));
}

这里面的初始化的原因是因为indices数值变化了,需要扩展数组么
if (integers[i] == maxVal)
{


count++;
int[] oldIndices = indices;
indices=new int[count];
oldIndices.CopyTo(indices,0);
indices[count-1]=i;
Debug.WriteLine(string.Format("Duplicate maximum found at element index {0}",i));
}


开始indices长度只有一个,后面数组长度变长了。具体要看代码的逻辑了。

[解决办法]
for循环有可能不执行,只在for里初始化,会有编译错误提示。

读书人网 >C#

热点推荐