A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏凡 中级黑马   /  2013-3-18 16:51  /  1429 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 夏凡 于 2013-3-20 12:33 编辑
  1. /*
  2.         程序功能:在有序数组中插入一个元素
  3. */

  4. class ArrInsert                        
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                 int arr[] ={1, 2, 3, 4, 6, 7};
  9.                 System.out.print("插入前:");
  10.                 arrPrint(arr);

  11.                 insert(arr, 5);
  12.                 System.out.print("插入后:");
  13.                 arrPrint(arr);
  14.         }
  15.         public static void arrPrint(int arr[])        //打印数组中的元素
  16.         {
  17.                 for(int i=0; i<arr.length; i++)
  18.                 {
  19.                         System.out.print(arr[i]+" ");
  20.                 }
  21.                 System.out.println();
  22.         }
  23.         public static int search(int arr[], int x)        //查找插入位置
  24.         {
  25.                 int low=0, mid, high=arr.length-1;
  26.                 while(low <= high)
  27.                 {
  28.                         mid = (low+high)/2;
  29.                         if(x < arr[mid])
  30.                         {
  31.                                 high = mid-1;
  32.                         }
  33.                         else
  34.                                 if(x > arr[mid])
  35.                                 {
  36.                                         low = mid+1;
  37.                                 }
  38.                 }
  39.                 return mid;
  40.         }
  41.         public static void insert(int arr[], int x)        //插入元素
  42.         {
  43.                 int local=search(arr, x);
  44.                 for(int i=arr.length-1; i>=local; i--)
  45.                 {
  46.                         arr[i+1] = arr[i];
  47.                 }
  48.                 arr[local] = x;
  49.         }
  50. }
复制代码
程序报错说“return mid”中的mid未初始化,求教高手应该怎么修改

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油

查看全部评分

4 个回复

倒序浏览
在程序第27行int low=0, mid, high=arr.length-1;中mid应该赋个初值,即mid=0

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
int low=0, mid, high=arr.length-1;只是对low和hight进行了赋值操作,并没有对mid进行赋值。 int low=0, mid=xx, high=arr.length-1;

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
若还有问题,请继续追问,没有的话,请将帖子分类改成【已解决】~
回复 使用道具 举报
楼主的查找插入位置函数写错了,应该为
  1. public static int search(int arr[], int x)        //查找插入位置
  2.         {
  3.                 int low=0,mid,high=arr.length-1;
  4.                 while(low <= high)
  5.                 {
  6.                                         mid = (low+high)/2;
  7.                     if(x < arr[mid])
  8.                     {
  9.                                                 high = mid-1;
  10.                                         }
  11.                                         else if(x > arr[mid])
  12.                                         {
  13.                                                 low = mid+1;
  14.                                         }
  15.                                         else
  16.                                         {
  17.                                                 return mid;
  18.                                         }
  19.                 }
  20.                 return low;
  21.         }
复制代码
这个例子在毕向东老师黑马程序员_毕向东_Java基础视频教程第04天-07-数组(折半查找)里有介绍。
按毕老师这样写mid是可以不初始化的。

还有,楼主的插入元素的函数也是错误的。因为数组声明并初始化了以后长度是不可以改变的,这样用固定了长度的数组插入一个元素肯定盛不下,会溢出报错。
这确的做法应该是再声明一个长度比原数组长度大1的数组接收插入5后的新数组然后再打印。

点评

够详细,谢谢  发表于 2013-3-20 12:33

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马