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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋耀冬 中级黑马   /  2013-3-18 08:34  /  1634 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//定义查找数组元素方法
        public static int getIndex(int[] arr, int key)
        {
                for (int x = 0; x < arr.length; x++)
                {
                        if (arr[x] == key)
                        {
                                return x;
                        }
                        //else
                        //        return -1;
                }       
                return -1;       
        }
我注释掉的两行刚开始自己练习写的,报错了。
为什么返回值不能定义在 for 语句中。

评分

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

查看全部评分

6 个回复

倒序浏览
首先,从逻辑上代码是不对的,不过从语法上我没发现有什么错误,我按照你的说法也编写了同样的代码,却没抛出异常或是错误啊。代码如下:
public static void main(String[] args) {
                               
                int num = getIndex(new int[]{2,4,6,1,8}, 6);
                System.out.println(num);
        }
     public static int getIndex(int[] arr, int key)
     {
             for (int x = 0; x < arr.length; x++)
             {
                     if (arr[x] == key)
                     {
                             return x;
                     }
                     else
                             return -1;
             }        
             return -1;        
     }
运行代码结果:-1
之所以-1是因为return是返回关键字,同时意味着结束标记,for循环中第一次循环判断不满足if条件就会执行else所以返回结果是-1。

评分

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

查看全部评分

回复 使用道具 举报
//定义查找数组元素方法
        public static int getIndex(int[] arr, int key)
        {
                for (int x = 0; x < arr.length; x++)
                {
                        if (arr[x] == key)
                        {
                                return x;
                        }
                        //else
                        //        return -1;
                }        
                return -1;        
        }
我注释掉的两行刚开始自己练习写的,报错了。
为什么返回值不能定义在 for 语句中。


for语句是循环语句 你定义到里面难道要循环返回码
所以报错了

点评

谢谢了, 看着老师思路泉涌,自己动手立马头大  发表于 2013-3-18 11:43

评分

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

查看全部评分

回复 使用道具 举报
[ 本帖最后由 薛飞 于 2013-3-18 12:34 编辑 ]\n\n1,如果楼主注释掉for外边的return的话,肯定会出现语法错误。因为java编译器在做语法检查时,要求此方法必须要有一个int返回值,而当for循环执行第一次时有可能出现x>=arr.length的情况而不满足条件,造成for循环一次也不执行,此时,该方法就没有返回值,故报语法错误。
2,如果楼主在for外面有return,想再写一个return到for循环里面的else下,则造成逻辑错误,变成只比较数组的第一个元素是否满足key值。只是需求不符合了,没有什么语法错误。
3,返回值当然可以定义在for循环内部,if下面那个不就是嘛,在else下面也没有任何问题。也就是说在for循环内部不论写不写返回值,都只是影响它的逻辑意义,不会出现语法错误。出现语法错误的根本原因是for循环的外部必须有返回值,来保证java语法严谨性。也就是说不管for循环内部如何写,for的外面必须跟一个return语句。(这个就是楼主把return写在for里面所报错的原因)

评分

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

查看全部评分

回复 使用道具 举报
循环内这个-1 返回值 没看懂,

最好把for(){} 循环的 return -1 去掉 ,调用你的方法你最后给我个 -1 ,你想说这个角标的元素不存在,这个元素自然不存在,太有有意义了吧,你

那你觉得放在内部,如果没有你要遍历的 key ,岂不是每次都返回 -1 ,最后又返回个 -1 ,看着一堆-1,你太有才了。

回复 使用道具 举报
我们的目的是在数组中查找与key相等的元素,所以遍历整个数组,相等就返回相应数组元素的角标,这里不需要加else语句,不相等就执行for外面的return语句就ok了。如果你加上else语句,那只有当arr[0]=key时才输出角标,否则就会执行else语句输出-1,退出循环。接下来的观点支持一楼楼主,return语句是结束语句。

评分

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

查看全部评分

回复 使用道具 举报
若还有问题,请继续追问,没有的话,请将帖子分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马