黑马程序员技术交流社区

标题: 为什么总是提示没有返回语句? [打印本页]

作者: HeiMaYSL    时间: 2012-5-10 17:19
标题: 为什么总是提示没有返回语句?
class test4
{

                        //定义某个字符串的打印方法。
                public static void sop(String str)
                {
                         System.out.println(str);
                }

                public static void main(String[] args)
                {

                        //方式一
                        String str1="abkkHellohhakskk";  
                        String str2="asHellohhadfid";
                        sop("字符串1为:"+str1);
                        sop("字符串2为:"+str2);

                        sop("这两个字符串中相同最大的字符串为:"+getMaxSub(str1,str2));   
                }

                public static String getMaxSub(String s1,String s2)
                {
                        String max="", min="";   //定义两个最大值和最小值变量
                       

                        max=(s1.length()>s2.length())?s1:s2;   //如果s1的长度大于s2的,那么s1就是最大的,
                                                              //就把s1赋给最大值变量max
                        min=(max==s1)?s2:s1;   //如果最大值等于s1时,那么s2就是最小值。就把s2赋给最小值变量min.
                       
                        //从那个小的字符串中查找与大的字符串相同的字符。这样可以优化内存。
                        for (int x=0;x<min.length();x++)
                        {
                                for (int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)
                                {
                                        String temp=min.substring(y,z);
                                       
                                        if (max.contains(temp))  //if(s1.indexOf(temp)!=-1)
                                                return temp;
                                }
                        }
                       
                }
}


为什么java虚拟机在编译时,总是提示我没有返回语句啊?我明明已经有return 了。应该返回了。
作者: 黄坚声    时间: 2012-5-10 17:22
主要了,Java虚拟机没有编译功能,楼上问题有矛盾!
作者: 黄坚声    时间: 2012-5-10 17:23
主意了,Java虚拟机没有编译功能,楼上问题有矛盾!
作者: 黄坚声    时间: 2012-5-10 17:23
注意了,Java虚拟机没有编译功能,楼上问题有矛盾!
作者: 黄坚声    时间: 2012-5-10 17:25
问题很简单!
你应该在方法的末尾还要加上return语句,保证你能绝对解决!
作者: 杨威    时间: 2012-5-10 17:29
本帖最后由 杨威 于 2012-5-10 17:33 编辑

确实少了哦,你说的只是return temp,如果没有呢
  1. class test4
  2. {

  3.                         //定义某个字符串的打印方法。
  4.                 public static void sop(String str)
  5.                 {
  6.                          System.out.println(str);
  7.                 }

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

  10.                         //方式一
  11.                         String str1="abkkHellohhakskk";  
  12.                         String str2="asHellohhadfid";
  13.                         sop("字符串1为:"+str1);
  14.                         sop("字符串2为:"+str2);

  15.                         sop("这两个字符串中相同最大的字符串为:"+getMaxSub(str1,str2));   
  16.                 }

  17.                 public static String getMaxSub(String s1,String s2)
  18.                 {
  19.                         String max="", min="";   //定义两个最大值和最小值变量
  20.                         

  21.                         max=(s1.length()>s2.length())?s1:s2;   //如果s1的长度大于s2的,那么s1就是最大的,
  22.                                                               //就把s1赋给最大值变量max
  23.                         min=(max==s1)?s2:s1;   //如果最大值等于s1时,那么s2就是最小值。就把s2赋给最小值变量min.
  24.                         
  25.                         //从那个小的字符串中查找与大的字符串相同的字符。这样可以优化内存。
  26.                         for (int x=0;x<min.length();x++)
  27.                         {
  28.                                 for (int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)
  29.                                 {
  30.                                         String temp=min.substring(y,z);
  31.                                        
  32.                                         if (max.contains(temp))  //if(s1.indexOf(temp)!=-1)
  33.                                                 return temp;
  34.                                 }
  35.                         }
  36.                        return "";//这里少了
  37.                         
  38.                 }
  39. }
复制代码

作者: 韩慧阳    时间: 2012-5-10 17:33
public static String getMaxSub(String s1,String s2)
                {
                        String max="", min="";   //定义两个最大值和最小值变量
                        

                        max=(s1.length()>s2.length())?s1:s2;   //如果s1的长度大于s2的,那么s1就是最大的,
                                                              //就把s1赋给最大值变量max
                        min=(max==s1)?s2:s1;   //如果最大值等于s1时,那么s2就是最小值。就把s2赋给最小值变量min.
                        
                        //从那个小的字符串中查找与大的字符串相同的字符。这样可以优化内存。
                        for (int x=0;x<min.length();x++)
                        {
                                for (int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)
                                {
                                        String temp=min.substring(y,z);
                                       
                                        if (max.contains(temp))  //if(s1.indexOf(temp)!=-1)
                                                return temp;
                                }
                        }
                        return "";//这里应该加一条return,因为你上面的if()满足了才会返回temp,那如果不满足if()或者for循环根本就没有执行呢?这个方法中的语句不管有
//没有执行都应该有返回值的。如果for没有被执行或者if知道循环结束也没有被执行,而你这时候不需要返回什么东西,那就return "";嘛。  
                }

作者: 杨鹏    时间: 2012-5-10 17:46
因为楼主的return语句是写在 for (int x=0;x<min.length();x++) {}这个循环主体的里面,试想一下:循环是要有条件的,如果这个循环的条件不满足,那么循环的代码块就执行不到,也就没有了返回值,所以会报错。一般在写返回语句的时候,前面进行判断,然后给要返回的变量进行赋值,在函数的末尾return 变量名或者返回值。
                        




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