namespace exp_1B
{
    class Program
    {       public int search_bin(int key,int high)
        {
            
            int[] arry = new int[10]; 
            int low = 0, mid;  high = 10;
            
            while (low <=high)
            {
                mid = ( low + high )*1/2;
                if (key == arry[mid]) 
                {
                    Console.WriteLine("have found the number");
                    return mid;
                }
                else if (key > arry[mid]) 
                { 
                    low = mid + 1; 
                    Console.WriteLine("the number is bigger"); 
                }
                else 
                { 
                    high = mid - 1; 
                    Console.WriteLine("the number is smaller"); 
                }
            }
            return 0;
         }
        public static void Main(string[] args)
        {
            Program obj_1 = new Program();
            int find_num; string accept_num; int length = 10;
            args = new string[20];
            Console.WriteLine("请输入十个按小到大排列的整数");
            for (int i = 0; i < 10; i++)
            {
               args[i] = Console.ReadLine();
               Console.WriteLine(args[i]); 
              // = Int32.Parse(accept_num);
            }
            Console.WriteLine("please input the number you want to find");
            accept_num = Console.ReadLine();
            find_num = Int32.Parse(accept_num);
            Console.WriteLine("the return_value is :");
            obj_1.search_bin(find_num, length);
            Console.WriteLine("return_value");
        }
    }
}
在searchb_bin 方法中 为什么 mid 的值总是10呢!从而引起数组越界的问题!!

解决方案 »

  1.   

     int low = 0, mid;  high = 10; 
    修改为 :  int low = 0, mid,high = 10; 或
    int low = 0;
    int  mid =0; 
    int high = 10; 
      

  2.   

    你程序里面的问题还是比较多的。
    1、int low = 0, mid;  high = 10;  其中high应该为9;
    2、for (int i = 0; i < 10; i++) 
                { 
                  args[i] = Console.ReadLine(); 
                  Console.WriteLine(args[i]); 
                  // = Int32.Parse(accept_num); 
                } 
    其中的 Console.WriteLine(args[i]); 多余了,你已经打印过了。
    3、还有一些打印部分不能达到你的要求的,具体的我就没去研究,你自己再看看吧。共同学习,共同进步!