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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈虹旭 中级黑马   /  2012-7-26 20:37  /  3331 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈虹旭 于 2012-7-27 17:14 编辑
  1. /*
  2. 数组的超找操作
  3. 原理:
  4. 遍历进行查找,找到相应的数时,记录下这个数的角标
  5. */

  6. class ArrayTest3
  7. {
  8. public static void main(String[] args)
  9. {
  10. int[] arr = new int[]{1,2,3,4,5,6,7,8,9};
  11. int index = getIndex(arr,4);
  12. System.out.println("index="+index);
  13. }

  14. //定义功能,在数组找查找一个数,并输出相应的角标
  15. public static int getIndex(int[] arr,int key)
  16. {
  17. for (int x= 0 ; x<arr.length-1; x++)
  18. {
  19. if(arr[x]==key)
  20. key = x;
  21. return x;
  22. }
  23. return -1;
  24. }
  25. }
复制代码


请各位大牛帮我看看  到底是哪里出了问题啊  明明是跟老师写的一样  为什么我编译了好几次  输出4的查找位置 ,结果输出的结果都是0  ,无语了。请大牛们指点迷津?

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

15 个回复

倒序浏览
本帖最后由 肖琦 于 2012-7-26 20:49 编辑
  1. /*

  2. 数组的超找操作

  3. 原理:

  4. 遍历进行查找,找到相应的数时,记录下这个数的角标

  5. */

  6. class ArrayTest3

  7. {

  8. public static void main(String[] args)
  9. {

  10. int[] arr = new int[]{1,2,3,4,5,6,7,8,9};

  11. int index = getIndex(arr,4);

  12. System.out.println("index="+index);

  13. }

  14. //定义功能,在数组找查找一个数,并输出相应的角标

  15. public static int getIndex(int[] arr,int key)

  16. {

  17. for (int x= 0 ; x<arr.length-1; x++)

  18. {

  19. if(arr[x]==key)//1<font color="red">----------此处和2是一句,和3不是一句,因为没有用括号包起来</font>

  20. key = x;//2--------------

  21. return x;//3<font color="red">-----------for循环一执行判断if不成立就renturn x,x当前值就是0</font>

  22. }

  23. return -1;

  24. }

  25. }
复制代码
其实就是括号的原因,要看准点
字给你加亮
回复 使用道具 举报

class ArrayTest3
{
public static void main(String[] args)
{
int[] arr = new int[]{1,2,3,4,5,6,7,8,9};
int index = getIndex(arr,4);
System.out.println("index="+index);
}

//定义功能,在数组找查找一个数,并输出相应的角标
public static int getIndex(int[] arr,int key)
{
for (int x= 0 ; x<arr.length-1; x++)
{
if(arr[x]==key)
        //key = x;这一句不能要,你把找到的角标赋给了key,
        return x; //直接返回角标x就行了,if底下的语句要用tab后退一下,或用大括号括起来,才代表跟if是一起的
}
return -1;
}
}
回复 使用道具 举报
/*
    数组的超找操作
    原理:
    遍历进行查找,找到相应的数时,记录下这个数的角标
    */

    class ArrayTest3
    {
                public static void main(String[] args)
                        {
                        int[] arr = new int[]{1,2,3,4,5,6,7,8,9};
                        int index = getIndex(arr,4);
                         System.out.println("index="+index);
                         }

    //定义功能,在数组找查找一个数,并输出相应的角标
    public static int getIndex(int[] arr,int key)
                {
                for (int x= 0 ; x<arr.length-1; x++)
                        {
                                if(arr[x]==key)
                                key=x;//这一句多于了啊,直接返回角标值就可以了
                                 return x;
                        }
                                return -1;
                }
    }
你是通过遍历在数组中查找一个数,并返回它的角标。你设置的条件是arr[x]==key,这一条件满足时,直接返回角标值即可,无需将x赋给key。
结果是3
回复 使用道具 举报
本帖最后由 郑正华 于 2012-7-26 20:59 编辑

for (int x= 0 ; x<arr.length-1; x++)
{
             if(arr[x]==key)
              key = x;           ←此处删掉! 如果key值等于arr[x],说明找到了,然后返回角标值 X 就行!
             return x;         
}
回复 使用道具 举报
肖琦 发表于 2012-7-26 20:48
其实就是括号的原因,要看准点
字给你加亮

哦 谢谢了  不过你说的也不是全对啊
怎么和2是一句呢  那是赋值   
我是多写了这一句  :   key = x;  
要不不写这一句,  要没就把下面改成:  return key;
回复 使用道具 举报
  1. class  CopyPic
  2. {
  3.          public static void main(String[] args)
  4.          {
  5.          int[] arr = new int[]{1,2,3,4,5,6,7,8,9};
  6.          int index = getIndex(arr,4);
  7.          System.out.println("index="+index);
  8.          }

  9.          //定义功能,在数组找查找一个数,并输出相应的角标
  10.         public static int getIndex(int[] arr,int key)
  11.          {
  12.          for (int x= 0;x<arr.length;x++)
  13.          {
  14.          if(arr[x]==key){
  15.          key = x;
  16.          return x;
  17.          }
  18.          }
  19.          return -1;
  20.          }
  21. }
复制代码
提醒你一下,如果if后面不加{},if条件满足的话,只会执行if后面的一行代码。
在这代码里面,x=0进循环的时候,arr[x]不等于key,key=x会跳过,但接着会执行return x,所以输出结果一直是0。还有你写的key=x是一个无效赋值,调用这个方法后,key的还是不会改变的。

点评

for语句中的条件为:x<arr.length,没有减一,很多同学都没有注意哦。  发表于 2012-7-26 23:59

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
罗宵 中级黑马 2012-7-26 21:01:16
8#
17.public static int getIndex(int[] arr,int key)

18.{

19.for (int x= 0 ; x<arr.length-1; x++)

20.{

21.if(arr[x]==key)

22.key = x;

23.return x;

24.}

25.return -1;

26.}

27.}
第22行出问题了。去掉就好了。或者在if上加{},把key=x和return括起来,因为if后面不加大括号,作用范围就只有紧跟着的一句。
照你现在的程序走法是:当x=0,arr[0]!=4不走if则直接走return x,所以不管怎么运行都只返回0
回复 使用道具 举报
乐峰 中级黑马 2012-7-26 21:49:30
9#
本帖最后由 聂峰 于 2012-7-26 21:51 编辑

07.class ArrayTest3

08.{

09.public static void main(String[] args)

10.{

11.int[] arr = new int[]{1,2,3,4,5,6,7,8,9};

12.int index = getIndex(arr,4);

13.System.out.println("index="+index);

14.}

15.

16.//定义功能,在数组找查找一个数,并输出相应的角标

17.public static int getIndex(int[] arr,int key)

18.{

19.for (int x= 0 ; x<arr.length-1; x++)

20.{

21.if(arr[x]==key){
22.key = x;//还有这一句真的没有用,应该删掉

23.return x;
     }//把这两句括起来,不然只要if里面的表达式是false,直接return x,永远都是零
24.}

25.return -1;

26.}

27.}

回复 使用道具 举报
这个只能说一个小括号引起的问题!
最好的方式就是写了if打打上括号就好!
回复 使用道具 举报
楼上正解。
回复 使用道具 举报
/*
数组的超找操作
原理:
遍历进行查找,找到相应的数时,记录下这个数的角标
*/

class ArrayTest3
{
public static void main(String[] args)
{
int[] arr = new int[]{1,2,3,4,5,6,7,8,9};
int index = getIndex(arr,4);
System.out.println("index="+index);
}

//定义功能,在数组找查找一个数,并输出相应的角标
public static int getIndex(int[] arr,int key)
{
for (int x= 0 ; x<arr.length-1; x++)//错误一:此处不用减一,否则最后一个元素无法访问{
if(arr[x]==key)
key = x;//错误二:这句话没作用,删除就行
return x;
}
return -1;
}
}

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
余清兰 发表于 2012-7-26 20:52
class ArrayTest3
{
public static void main(String[] args)

明白了 谢谢啊!
回复 使用道具 举报
赵方明 发表于 2012-7-26 20:52
/*
    数组的超找操作
    原理:

嗯  懂了  谢谢了!
回复 使用道具 举报
郑正华 发表于 2012-7-26 20:55
for (int x= 0 ; x

嗯 懂了 谢谢!
回复 使用道具 举报
淡然 发表于 2012-7-26 22:49
/*
数组的超找操作
原理:

哦哦  是啊  在排序中才用到的-1哈  我给写顺手了  谢谢高手提醒哈  !  :loveliness:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马