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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 打工人 金牌黑马   /  2012-10-14 09:49  /  2491 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冯海霞 于 2012-10-14 13:00 编辑

我想知道,return语句到底要放在哪里?写代码的时候遇到了个问题
下面这个代码是数组中的查找,这个代码在思路上来讲有点问题,但是编译的时候会出现编译错误,说缺少返回语句
class a
{
public static void main(String[] args)
{   
  int[]w={1,3,2,3,4};
  int x=cha(w,2);
  System.out.println(x);
}
public static int cha(int[] s,int k)
{
    for (int x=0;x<s.length ;x++ )
    {
    if(s[x]==k)
     {
      return x;
           }
  else
   return -1;
    }
   
//这里缺少返回语句   
}
}
我想知道,这个return语句一定要放在方法的结尾才可以吗

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1 神马都是浮云

查看全部评分

10 个回复

倒序浏览
不是一定要在末尾,是因为你这种写法如果不进入for循环就没有返回值~

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上正解,你可以这样想,假如你进不了for循环那就是没有返回值的;
回复 使用道具 举报
  1. class a
  2. {
  3.         public static void main(String[] args)
  4.         {   
  5.                 int[]w={1,3,2,3,4};
  6.                 int x=cha(w,2);
  7.                 System.out.println(x);
  8.         }
  9.         public static int cha(int[] s,int k)
  10.         {
  11.                 for (int x=0;x<s.length ;x++ )
  12.                 {
  13.                 if(s[x]==k)
  14.                         return x;
  15.                 }
  16.                 return -1;
  17.         }
  18. }
复制代码
上面修改后的代码可以运行。之所以楼主的出现问题主要是cha()函数是int型的,因此必须返回一个int型的数值,但是楼主的return返回值全部在for()循环体里面,虽然重人们的逻辑上老看,程序确实会返回一个int型的值,但是程序在编译的时候是不具备这样的逻辑的。因此必须在方法中有return语句,上面改后的代码比较简洁并且可以解决问题。
回复 使用道具 举报
如果进不了for循环就没有返回值
回复 使用道具 举报
public static int cha(int[] s,int k)  //注意你这里的函数返回类型是int,那么对应的必须有返回int值的语句
{
    for (... )   //for的部分表达出自己想要的东西即可;
    {...
    }
   
    return 0;//这里缺少返回语句,是为了对应你的函数返回类型的   
}
}

只要你的for没有问题,整个就不会有问题了;

记得做到 一 一对应即可
回复 使用道具 举报
黄小贝 发表于 2012-10-14 09:54
不是一定要在末尾,是因为你这种写法如果不进入for循环就没有返回值~

这不是明显的能进入for循环吗
回复 使用道具 举报
黄小贝 发表于 2012-10-14 09:54
不是一定要在末尾,是因为你这种写法如果不进入for循环就没有返回值~

啊。。。。也就是说,编译的时候是要单独只看这个方法的语法,因为不能保证数组不是空数组,所以也就不能保证能进for循环??
回复 使用道具 举报
冯海霞 发表于 2012-10-14 12:59
啊。。。。也就是说,编译的时候是要单独只看这个方法的语法,因为不能保证数组不是空数组,所以也就不能 ...

貌似不是的我刚才测了下,下面这样编译是通过的

public static int cha(int[] s, int k) {
                for (int i = 0;; i++) {
                        return 1;
                }

                // 这里缺少返回语句
        }

回复 使用道具 举报
黄小贝 发表于 2012-10-14 13:09
貌似不是的我刚才测了下,下面这样编译是通过的

public static int cha(int[] s, int k) {

因为你这个for循环只要方法被调用了就必定会执行并且必定会返回值。
回复 使用道具 举报
程序中有两个return不是很规范的
EX:
if(**)
{
  return **;
}
else
  return **;
应该改成:
***  result;
if(**)
{
  result = **;
}
else
  result = **;
return result;
这样在开发中比较规范
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马