日期:2014-05-17  浏览次数:20819 次

这是C#入门经典里面的例子,就是编译不过,请高手帮忙
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace ConsoleApplication1
{
  class Program
  {

  static int Maxima(int[] integers, out int[] indices) //参数一记录最大数,参数二记 录数组序号
  {
  Debug.WriteLine("搜索最大数开始."); //在output窗口输出调试信息
  int maxVal = integers[0]; //定义maxVal变量存储最大值,初定为数组第一个整数
  indices = new int[1]; //定义indices数组存储最大值的序号
  indices[0] = 0; //初定最大值的序号为0,即第一个数为最大值
  int count = 1; //最大值的个数
  Debug.WriteLine(string.Format("初始化最大值为{0},位置为0.", maxVal));
  //在output输出初始化信息
  for (int i = 1; i < integers.Length; i++) //函数的主体为一个循环
  {
  Debug.WriteLine(string.Format("现在开始搜索最大值,从序号{0}开始。", i));
  if (integers[i] > maxVal)
  {
  maxVal = integers[i]; //分别对第一初始值进行比较
  count = 1; //发现更大的值时,count计数不变
  indices = new int[1]; //每发现一个最大值就重新定义一个数组来存储序号
  indices[0] = i; //更新最大数的序号
  Debug.WriteLine(string.Format(
  "发现新的最大值为{0},序号为{1}", maxVal, i));
  }
  else
  {
  if (integers[i] == maxVal) //相同的值
  {
  count++; //最大值个数增加1
  int[] oldIndices =indices; //旧最大值的序号备份到oldIndices中=====说indices没定义===
  int[] indices = new int[count]; //新定义数组,新的长度
  oldIndices.CopyTo(indices, 0); //复制就序号到新数组中,从0开始复制
  indices[count - 1] = i; //新的最大值的序号
  Debug.WriteLine(string.Format("发现相同的最大值在第{0}序号", i));
  }
  }
  }
  Trace.WriteLine(string.Format("最大值为{0},一共有{1}个", maxVal, count));
  Debug.WriteLine("搜索最大值完毕");
  return maxVal;

  }


  static void Main(string[] args)
  {
  int[] testArray = { 4, 7, 4, 7, 5, 6, 8, 9, 5, 9, 7, 8, 9 }; //要测试的数组
  int[] maxValIndices; // 存储最大值序号的数组
  int maxVal = Maxima(testArray, out maxValIndices);
  Console.WriteLine("最大数为{0},分别在:", maxVal);
  foreach (int index in maxValIndices)
  {
  Console.WriteLine(index);
  }
  Console.ReadKey();

  }

   
  }
}

------解决方案--------------------
int[] oldIndices =indices; //旧最大值的序号备份到oldIndices中=====说indices没定义===
int[] indices = new int[count]; //新定义数组,新的长度


问题在int[]indices,因为你重名了,定义了一个跟参数一样的局部变量,改成
int[] indices1 = new int[count]; //新定义数组,新的长度

这样就可以了


------------------------------------
话说这个例子我照着书上调试过的,没问题的啊,你输入错误了吧