#region Using directivesusing System;
using System.Collections.Generic;
using System.Text;#endregionnamespace Ch06Ex02
{
    class Program
    {
        static int MaxValue(int[] intArray, out int maxIndex)
        {
            int maxVal = intArray[0];
            for (int i = 1; i < intArray.Length; i++)
            {
                if (intArray[i] > maxVal)
                {
                    maxVal = intArray[i];
                    maxIndex = i;
                }
            }
            return maxVal;
        }        static void Main(string[] args)
        {
            int[] myArray = {
            1, 8, 3, 6, 2, 5, 9, 3, 0, 2
         };
            int maxIndex;
            Console.WriteLine("The maximum value in myArray is {0}", MaxValue(myArray, out maxIndex));
            Console.WriteLine("The first occurrence of this value in myArray is {0}", maxIndex + 1);
            Console.ReadKey();
        }
    }
}
求教,为什么在return这句出错,如何改?

解决方案 »

  1.   

            static int MaxValue(int[] intArray, out int maxIndex) 
            { 
                int maxVal = intArray[0]; 
                for (int i = 1; i < intArray.Length; i++) 
                { 
                    if (intArray[i] > maxVal) 
                    { 
                        maxVal = intArray[i]; 
                        maxIndex = i; 
                    } 
                } 
              return maxVal; 
            } 你这里return是返回一个数组`  而你在定义的时候却写成int     (static int MaxValue)  而数组里面的值是object类型的` 所以会报错`   再有你int maxVal = intArray[0]; 是想把maxVal定义成数组里面的第一个数`你这样写是不对的~  首先它们的类型就不相同`一个是基类object一个是int 这样是错误的`~   
      

  2.   

    去掉MaxValue前面的修饰符static
      

  3.   

    不好意思,我刚才回答错了,现在将调试好的程序列出如下:#region Using directives using System; 
    using System.Collections.Generic; 
    using System.Text; #endregion namespace Ch06Ex02 

        class Program 
        { 
            static void MaxValue(int[] intArray, out int maxVal, out int maxIndex)
            { 
                maxVal = intArray[0];
                maxIndex = 1;
                for (int i = 1; i < intArray.Length; i++)
                {
                    if (intArray[i] > maxVal)
                    {
                        maxVal = intArray[i];
                        maxIndex = i;
                    }
                }
            }         static void Main(string[] args) 
            { 
                int[] myArray = new int[]{ 
                1, 8, 3, 6, 2, 5, 9, 3, 0, 2 
                };
                int maxVal, maxIndex;
                MaxValue(myArray, out maxVal, out maxIndex);
                Console.WriteLine("The maximum value in myArray is {0}", maxVal);
                Console.WriteLine("The first occurrence of this value in myArray is {0}", maxIndex);
                Console.ReadKey();
            } 
        } 

      

  4.   

    1楼你指出了错误,但是我是初学者,不太清楚,虽然有其他很多方法能实现我要的效果,但是我就想知道我错那?如何在现在的基础修改?我要实现自我return返回和参数返回在同一个函数中,能实现吗?
      

  5.   

    using System;
    using System.Collections.Generic;
    using System.Text;namespace ConsoleApplication2
    {
        class Program
        {
            static int MaxValue(int[] intArray, int maxIndex)
            {
                int maxVal = intArray[0];
                for (int i = 1; i < intArray.Length; i++)
                {
                    if (intArray[i] > maxVal)
                    {
                        maxVal = intArray[i];
                        maxIndex = i;
                    }
                }
                return maxVal;
            } 
            static void Main(string[] args)
            {
                int[] myArray = { 
                1, 8, 3, 6, 2, 5, 9, 3, 0, 2 
            };
                int maxIndex=0;
                Console.WriteLine("The maximum value in myArray is {0}", MaxValue(myArray, maxIndex));
                Console.WriteLine("The first occurrence of this value in myArray is {0}", maxIndex + 1);
                Console.ReadKey();         }
        }
    }
    看看吧!!
      

  6.   

    可以实现,只需将maxIndex初始化下
    #region Using directivesusing System;
    using System.Collections.Generic;
    using System.Text;#endregionnamespace Ch06Ex02
    {
        class Program
        {
            static int MaxValue(int[] intArray, out int maxIndex)
            {
                int maxVal = intArray[0];
                maxIndex = 1;//随便赋个整数,能个初始化作用
                for (int i = 1; i < intArray.Length; i++)
                {
                    if (intArray[i] > maxVal)
                    {
                        maxVal = intArray[i];
                        maxIndex = i;
                    }
                }
                return maxVal;
            }        static void Main(string[] args)
            {
                int[] myArray = { 
                1, 8, 3, 6, 2, 5, 9, 3, 0, 2 
            };
                int maxIndex;
                Console.WriteLine("The maximum value in myArray is {0}", MaxValue(myArray, out maxIndex));
                Console.WriteLine("The first occurrence of this value in myArray is {0}", maxIndex + 1);
                Console.ReadKey();
            }
        }
    }
      

  7.   

    return并没有错啊。。楼主缺少了给maxIndex赋值,out参数在返回前是必须赋值的,由于你的赋值是在if语句之内,并不能保证一定能在返回前有赋值,所以只需加多一句:maxIndex=-1;这样就可以了。 static int MaxValue(int[] intArray, out int maxIndex) 

    int maxVal = intArray[0];
    maxIndex=-1;//加上这一句。
    for (int i = 1; i < intArray.Length; i++) 

    if (intArray[i] > maxVal) 

    maxVal = intArray[i]; 
    maxIndex = i; 


    return maxVal; 
      

  8.   

    tks min_jie ,你分析出了重点。我就是对这个概念没有理解透彻,同时,也谢谢iamaitman ,因为iamaitman先回答出重点,所以主要把分给了iamaitman。
      

  9.   

    你的for语句如果一次也不执行的话,返回什么?返回null,这不是int
    再者“int maxVal = intArray[0];” 中的intArray[0]如果是null,同样不能返回int。
    根据这两点,修改程序。