黑马程序员技术交流社区

标题: 关于方法返回值得问题 [打印本页]

作者: 宋耀冬    时间: 2013-3-18 08:34
标题: 关于方法返回值得问题
//定义查找数组元素方法
        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 语句中。
作者: 郝强勇    时间: 2013-3-18 09:19
首先,从逻辑上代码是不对的,不过从语法上我没发现有什么错误,我按照你的说法也编写了同样的代码,却没抛出异常或是错误啊。代码如下:
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。
作者: 郭利超    时间: 2013-3-18 09:34
//定义查找数组元素方法
        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 12:23
[ 本帖最后由 薛飞 于 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里面所报错的原因)
作者: 杨玉辉    时间: 2013-3-18 14:07
循环内这个-1 返回值 没看懂,

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

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


作者: 葛晓红    时间: 2013-3-18 14:08
我们的目的是在数组中查找与key相等的元素,所以遍历整个数组,相等就返回相应数组元素的角标,这里不需要加else语句,不相等就执行for外面的return语句就ok了。如果你加上else语句,那只有当arr[0]=key时才输出角标,否则就会执行else语句输出-1,退出循环。接下来的观点支持一楼楼主,return语句是结束语句。
作者: 陈丽莉    时间: 2013-3-18 14:47
若还有问题,请继续追问,没有的话,请将帖子分类改成【已解决】~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2