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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 潜伏 中级黑马   /  2013-11-16 20:24  /  2296 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
要求:获取两个字符串中最长的相同子串
方法:
        1,按照长度不同分别截取较短的那个字符串的子串
        2,从长到短依次判断子串是否包含于较长字符串中
*/
class Cut
{
    public String cut(String b,String a)
    {
        for(int x=b.length();x>0;x--)
        {
            for(int y=0;y<b.length()-x+1;y++)
            {
                String c = b.substring(y,y+x);
                if(a.contains(c))
                        break;
               
            }
        }
        return c;
    }
}
class CutDemo
{
    public static void main(String[] args)
    {
        String a="shanthihui";
        String b="hauthij";
        System.out.println(new Cut().cut(b,a));
    }
}

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

16 个回复

倒序浏览
break已经结束,怎么还会用 return
回复 使用道具 举报
  1. class Cut
  2. {
  3.     public String cut(String b,String a)
  4.     {
  5.         for(int x=b.length();x>0;x--)
  6.         {
  7.             for(int y=0;y<b.length()-x+1;y++)
  8.             {
  9.                 String c = b.substring(y,y+x);
  10.                 if(a.contains(c))
  11.                     return c;    //此处已经找出最长子串,因此返回最长子串值           
  12.             }
  13.         }
  14.        return "";   //此处需返回String类型,“”或者null或者“内容”均可
  15.     }
  16. }
  17. class CutDemo
  18. {
  19.     public static void main(String[] args)
  20.     {
  21.         String a="shanhauthijthihui";
  22.         String b="hauthij";
  23.         System.out.println(new Cut().cut(b,a));
  24.     }
  25. }
复制代码
if(a.contains(c))处查找出最长子串,因此需要返回最长子串值 ,在for循环结束后需返回字符串类型。见代码11、16行处
                     

评分

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

查看全部评分

回复 使用道具 举报
呵呵,如二楼所说,如果你仅仅是希望终止语句,比如break,或者结束虚拟机采用System.exit(-1)或者System.exit(0);
而return是方法执行后将值进行返回,可以是null,返回给谁呢?
——是向调用者this对象返回所需要的参数。
回复 使用道具 举报
找到了字符串就return c啊,break干什么

如果没有找到就在方法最下面加上return null作为标识
回复 使用道具 举报
不对啊,将break去掉,将return c 放在break的位置,却还是显示 :缺少返回语句
回复 使用道具 举报
潜伏 中级黑马 2013-11-16 21:22:45
7#
已经解决,为什么for循环结束还要返回啊,不是返回过吗?
回复 使用道具 举报
潜伏 发表于 2013-11-16 21:22
已经解决,为什么for循环结束还要返回啊,不是返回过吗?

那是如果找到了才会进入到那段代码啊! 如果没有找到就不会进入return c那里面了,这个时候就没有返回值,所以你必须还要考虑没有找到相同字符串的情况下,需要返回什么~
回复 使用道具 举报
潜伏 发表于 2013-11-16 21:22
已经解决,为什么for循环结束还要返回啊,不是返回过吗?

假设a="abcd",b="efg"不就找不到最长相同字串了吗?不就执行不了if的语句了吗?不就没有返回值了吗。。。咳,估计你这道题连算法怎么来的都不是很明白。。。你要么背下来吧,要么查查“动态规划“慢慢研究吧。。。
回复 使用道具 举报
第一个 return是你想返回的值,第二个return才是方法的返回值,.
如果返回值定义在for循环内,则必须在循环体内返回!
如果返回值不在循环体内,即程序错误后,需指定方法的返回值,一般是null或"";
回复 使用道具 举报
潜伏 中级黑马 2013-11-17 18:10:10
11#
spiderman 发表于 2013-11-16 22:32
假设a="abcd",b="efg"不就找不到最长相同字串了吗?不就执行不了if的语句了吗?不就没有返回值了吗。。。 ...

我想说这是我自己写的行不?老师只是出题,我还没看讲解就写了,不过想来很久
回复 使用道具 举报
潜伏 中级黑马 2013-11-17 18:12:07
12#
Weix1992 发表于 2013-11-16 21:39
那是如果找到了才会进入到那段代码啊! 如果没有找到就不会进入return c那里面了,这个时候就没有返回值 ...

你说的很好,不过return放在外循环行吗?
回复 使用道具 举报
潜伏 发表于 2013-11-17 18:12
你说的很好,不过return放在外循环行吗?

没懂你的意思。。
回复 使用道具 举报
潜伏 中级黑马 2013-11-17 20:08:31
14#
不是循环镶嵌吗?内循环结束了?不是还有外循环吗?把return放在外循环处。哦哦哦。。。是不是return了内外循环都结束了啊?
回复 使用道具 举报
潜伏 中级黑马 2013-11-17 20:13:55
15#
Weix1992 发表于 2013-11-17 18:34
没懂你的意思。。

不是循环镶嵌吗?内循环结束了?不是还有外循环吗?把return放在外循环处。哦哦哦。。。是不是return了内外循环都结束了啊?
回复 使用道具 举报
潜伏 发表于 2013-11-17 20:13
不是循环镶嵌吗?内循环结束了?不是还有外循环吗?把return放在外循环处。哦哦哦。。。是不是return了内 ...

return了方法都结束了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马