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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class ReturnTest
  2. {
  3.         public static int test()
  4.         {  int m =0;
  5.                 for (int i = 0; i < 20; i ++ )
  6.                 {       
  7.                        
  8.                         for (int j = 9;j < 20-i ;j++ )
  9.                         {
  10.                                         if (i==j)
  11.                                         {
  12.                                                
  13.                                                 return j;
  14.                                         }
  15.                         }
  16.                        
  17.                 }return  m;
  18.        
  19.         }
  20.         public static void main(String[] args)
  21.         {
  22.                 int m;
  23.                 m = test();
  24.                 System.out.println(m);
  25.         }
  26. }
复制代码
代码中有两个for
循环,方法test是一个需要返回值的方法,为什么把return写在第二个for内,编译时就提示结尾需要 return,好吧,需要返回值的方法结尾必需写return,但是我返回的是m,结果应该是0才对 啊。怎么是9?是不是for 内的那个return把j的值赋给了m?哎。。纠结啊。。。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

5 个回复

倒序浏览
那是因为你在内存循环return了。把内层循环中的return注释掉,就可以了。
回复 使用道具 举报
不是把j赋值给m
你可以把j、m换成实际数值去测试,我就这样得出来结果的
至于为什么要写return  m?
因为你的方法没有返回值,而if语句可能执行不到,所以编译器会检测到这个错误

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
黄或俊 发表于 2012-4-10 17:38
不是把j赋值给m
你可以把j、m换成实际数值去测试,我就这样得出来结果的
至于为什么要写return  m?

谢谢,了解了。
回复 使用道具 举报
我的心那个纠结啊,看到这个问题准备回答后。就掉线到现在。
版主大大如果看到给个分吧,得个分不容易。
  1. class ReturnTest

  2. {

  3.         public static void test()

  4.         {  int m =0;

  5.                 for (int i = 0; i < 20; i ++ )

  6.                 {        

  7.                         

  8.                         for (int j = 9;j < 20-i ;j++ )

  9.                         {

  10.                                         if (i==j)

  11.                                         {

  12.                                                 

  13.                                                // return i;

  14.                                         }
  15.                                                                                 System.out.print(i+"+"+j+" ");

  16.                         }

  17.                         System.out.println();

  18.                 }

  19.         

  20.         }

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

  22.         {

  23.                test();

  24.         }

  25. }
复制代码
不是把J赋给了M。。而是本来就返回J。判断了i=j就return j .这语句迟早会执行的。所以一return后。就不执行第2个return了。
我把代码改了下,看下就明白了。

输出结果:
0+9 0+10 0+11 0+12 0+13 0+14 0+15 0+16 0+17 0+18 0+19
1+9 1+10 1+11 1+12 1+13 1+14 1+15 1+16 1+17 1+18
2+9 2+10 2+11 2+12 2+13 2+14 2+15 2+16 2+17
3+9 3+10 3+11 3+12 3+13 3+14 3+15 3+16
4+9 4+10 4+11 4+12 4+13 4+14 4+15
5+9 5+10 5+11 5+12 5+13 5+14
6+9 6+10 6+11 6+12 6+13
7+9 7+10 7+11 7+12
8+9 8+10 8+11
9+9 9+10
10+9

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先要看看i和j有没有相等的可能??如果两个没有相等的可能就不会执行return j;
就没有返回值,编译的时候当然提示要有返回值撒
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马