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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏亮 中级黑马   /  2012-9-16 21:04  /  1327 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 魏亮 于 2012-9-17 07:40 编辑

这是获取两个字符串中最大相同子串的练习代码。
class StringTest3
{
        public static void main(String[] args)
        {
                String s1="abcwerthelloyuiodef";
                String s2="cvhellobnm";
                String s3=maxSubString(s1,s2);
                System.out.println("s3=="+s3);
                //System.out.println("Hello World!");
        
        }
        public static String maxSubString(String s1,String s2)
        {
                String max="",min="";
                max=(s1.length()>s2.length())?s1:s2;
                min=(max==s1)?s2:s1;
                for (int x=0;x<s2.length() ;x++ )
                {
                        for (int start=0,end=min.length()-x; end<min.length()+1;start++,end++ )
                        {
                                String temp=min.substring(start,end);
                                System.out.println(temp);
                                if(max.contains(temp))
                                        return temp;
                        }
                }
                //return ""; 问题在这,为什么这句一注释,就报缺少返回语句的错误呢??上面不是已经return temp 了吗?求指教
               
        }
}


评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
这是获取两个字符串中最大相同子串的练习代码。
class StringTest3
{
        public static void main(String[] args)
        {
                String s1="abcwerthelloyuiodef";
                String s2="cvhellobnm";
                String s3=maxSubString(s1,s2);
                System.out.println("s3=="+s3);
                //System.out.println("Hello World!");
        
        }
        public static String maxSubString(String s1,String s2)
        {
                String max="",min="";
                max=(s1.length()>s2.length())?s1:s2;
                min=(max==s1)?s2:s1;
                for (int x=0;x<s2.length() ;x++ )
                {
                        for (int start=0,end=min.length()-x; end<min.length()+1;start++,end++ )
                        {
                                String temp=min.substring(start,end);
                                System.out.println(temp);
                                if(max.contains(temp))
                                        return temp;
                        }
                }
                //return ""; 问题在这,为什么这句一注释,就报缺少返回语句的错误呢??上面不是已经return temp 了吗?求指教
             //粗心了哈,  return temp是双重for循环的返回结果,如果不执行第一个for语句,即s>=s2.length(),那么就不执行后面的for语句,所以这里必须要有return ""
               
        }
}


评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
虽然说你定义了循环中return
在你理解上x=0开始,必然会执行循环
但是计算机可不管那么多,我可是机器!我可以当做可能没执行这个循环,然后就没return,因此会读作缺乏return
回复 使用道具 举报
class StringTest3
{
         public static void main(String[] args)
         {
                 String s1="abcwerthelloyuiodef";
                 String s2="cvhellobnm";
                 String s3=maxSubString(s1,s2);
                 System.out.println("s3=="+s3);
                 //System.out.println("Hello World!");
         
         }
         public static String maxSubString(String s1,String s2)
         {
                 String max="",min="";
                 max=(s1.length()>s2.length())?s1:s2;
                 min=(max==s1)?s2:s1;
                 for (int x=0;x<s2.length() ;x++ )
                 {
                         for (int start=0,end=min.length()-x; end<min.length()+1;start++,end++ )
                         {
                                 String temp=min.substring(start,end);
                                 System.out.println(temp);
                                 if(max.contains(temp))
                                         return temp;
                         }
                 }
                 //return ""; 问题在这,为什么这句一注释,就报缺少返回语句的错误呢??上面不是已经return temp 了吗?求指教
                 
         }
}

因为里面的ruturn是循环里面的return,而不是你定义的整个maxSubStrin的返回。
虽然你知道会执行循环里面的return返回,但是计算机会认为你在语法上有问题。
这也是严谨的一种表现吧。
回复 使用道具 举报
计算机没有思想,他并不知道循环是否会执行,就不确定是否循环里的返回语句会执行。就默认为没有可执行的
返回语句,就会报没有返回的错误。
回复 使用道具 举报
这个方法中,第一个ruturn是循环里面的return,而不是定义在整个maxSubStrin里的返回。
虽然我们知道会执行循环里面的return返回,但是计算机编译是在语法层面上进行检查是否有语法错误。
这也是Java是一种强类型语言的表现吧。
回复 使用道具 举报
乔九 中级黑马 2012-9-16 23:15:21
7#

class StringTest3
{
         public static void main(String[] args)
         {
                 String s1="abcwerthelloyuiodef";
                 String s2="cvhellobnm";
                 String s3=maxSubString(s1,s2);//此句调用的是一个有返回值得函数
                 System.out.println("s3=="+s3);
                 //System.out.println("Hello World!");
         
         }
         public static String maxSubString(String s1,String s2)
         {
                 String max="",min="";
                 max=(s1.length()>s2.length())?s1:s2;
                 min=(max==s1)?s2:s1;
                 for (int x=0;x<s2.length() ;x++ )
                 {
                         for (int start=0,end=min.length()-x; end<min.length()+1;start++,end++ )
                         {
                                 String temp=min.substring(start,end);
                                 System.out.println(temp);
                                 if(max.contains(temp))
                                         return temp;
                         }
                 }
                 //return ""; 问题在这,为什么这句一注释,就报缺少返回语句的错误呢??上面不是已经return temp 了吗?求指教
                 
         }
} 被调用的maxSubString 是一个返回值为String的函数在for循环结束时肯定要有一个返回值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马