黑马程序员技术交流社区

标题: 真的很不懂,return改用在哪儿???呜呜 [打印本页]

作者: 潜伏    时间: 2013-11-16 20:24
标题: 真的很不懂,return改用在哪儿???呜呜
/*
要求:获取两个字符串中最长的相同子串
方法:
        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));
    }
}
作者: 荣晓鹤    时间: 2013-11-16 20:33
break已经结束,怎么还会用 return
作者: 天ya~_琼楼    时间: 2013-11-16 20:51
  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行处
                     
作者: 小马过河    时间: 2013-11-16 20:56
呵呵,如二楼所说,如果你仅仅是希望终止语句,比如break,或者结束虚拟机采用System.exit(-1)或者System.exit(0);
而return是方法执行后将值进行返回,可以是null,返回给谁呢?
——是向调用者this对象返回所需要的参数。
作者: Weix1992    时间: 2013-11-16 21:02
找到了字符串就return c啊,break干什么

如果没有找到就在方法最下面加上return null作为标识
作者: 潜伏    时间: 2013-11-16 21:18
不对啊,将break去掉,将return c 放在break的位置,却还是显示 :缺少返回语句
作者: 潜伏    时间: 2013-11-16 21:22
已经解决,为什么for循环结束还要返回啊,不是返回过吗?
作者: Weix1992    时间: 2013-11-16 21:39
潜伏 发表于 2013-11-16 21:22
已经解决,为什么for循环结束还要返回啊,不是返回过吗?

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

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

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

你说的很好,不过return放在外循环行吗?
作者: Weix1992    时间: 2013-11-17 18:34
潜伏 发表于 2013-11-17 18:12
你说的很好,不过return放在外循环行吗?

没懂你的意思。。
作者: 潜伏    时间: 2013-11-17 20:08
不是循环镶嵌吗?内循环结束了?不是还有外循环吗?把return放在外循环处。哦哦哦。。。是不是return了内外循环都结束了啊?
作者: 潜伏    时间: 2013-11-17 20:13
Weix1992 发表于 2013-11-17 18:34
没懂你的意思。。

不是循环镶嵌吗?内循环结束了?不是还有外循环吗?把return放在外循环处。哦哦哦。。。是不是return了内外循环都结束了啊?
作者: Weix1992    时间: 2013-11-17 20:22
潜伏 发表于 2013-11-17 20:13
不是循环镶嵌吗?内循环结束了?不是还有外循环吗?把return放在外循环处。哦哦哦。。。是不是return了内 ...

return了方法都结束了!




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