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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 金鑫613 初级黑马   /  2012-10-8 21:01  /  1851 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 金鑫613 于 2012-10-8 21:42 编辑
  1. class  Zheban
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[]arr=new int[]{0,1,2,3,4,5,6,7,8};
  6.                 System.out.println(chazhao(arr,0));
  7.                 System.out.println(chazhao(arr,4));
  8.                 System.out.println(chazhao(arr,8));
  9.                 System.out.println(chazhao(arr,10));
  10.         }
  11. //用折半法查找给定数据在数组中第一次出现的位置
  12.         public static int chazhao(int arr[],int key)
  13.         {
  14.                 int min=0;
  15.                 int max=arr.length;
  16.                 int mid=(min+max)>>1;
  17.                 while (max>=min)
  18.                 {
  19.                         if (key>arr[mid])
  20.                         {
  21.                                 min=mid+1;
  22.                         }
  23.                         else if (key<arr[mid])
  24.                         {
  25.                                 max=mid-1;
  26.                         }
  27.                         else
  28.                                 return mid;
  29.                         mid=(min+max)>>1;
  30.                 }
  31.                 return -1;
  32.         }
  33. }
复制代码
大家好,我最近刚开始学习java基础,今天看完毕老师关于数组教学的视频后练习编写的数组查询函数,但出现一个问题,当查找的数据大于数组中的最大值时会出现以下这种情况:

定义的升序排列的数组为{0,1,2,3,4,5,6,7,8},查找的数据key我设定的是数组中的最小值0,中间值4,最大值8,以及超出最大值的10。
现在的问题是前三个数据都能正常查找,但在查找超出范围的数据10的时候出现上述问题,检查了两遍没有发现出现这个问题的原因,请大家帮忙查找一下问题的所在。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 初学的人要坚持努力,不要半途而废.

查看全部评分

7 个回复

倒序浏览
本帖最后由 李兆宁 于 2012-10-8 21:11 编辑

length是数组长度,最后一个角标要减1,在程序15行。。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

回复 使用道具 举报
李兆宁 发表于 2012-10-8 21:04
length是数组长度,最后一个角标要减1,在程序15行。。

嗯 是的 谢谢 我也才刚发现
回复 使用道具 举报
本帖最后由 缘木求鱼 于 2012-10-8 21:40 编辑

一楼是正解。但是究其原因的话就是:

你的程序中定义 max的长度为arr.length.单是arr[max]就已经越界了


回复 使用道具 举报
李兆宁 发表于 2012-10-8 21:04
length是数组长度,最后一个角标要减1,在程序15行。。

嗯。max=arr.length-1;就对了。异常其实也提示这个错误了,java。lang.ArrayIndexOutOfBoundOfBoundsException。就是给你提示。
回复 使用道具 举报
金鑫613 发表于 2012-10-8 21:17
嗯 是的 谢谢 我也才刚发现

如果问题解决,帖子改为已解决,谢谢配合
回复 使用道具 举报
韩军博 发表于 2012-10-8 21:31
如果问题解决,帖子改为已解决,谢谢配合

请问一下怎么更改
回复 使用道具 举报
看看..............
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马