首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#代码有关问题

2013-07-20 
C#代码问题本帖最后由 CJavaer 于 2013-07-16 18:06:11 编辑斜体indices new int[1]处,我不明白,为什么

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里初始化,会有编译错误提示。

热点排行