黑马程序员技术交流社区

标题: String 练习题中 的问题 [打印本页]

作者: yujiangjiao    时间: 2014-3-22 16:27
标题: String 练习题中 的问题
本帖最后由 yujiangjiao 于 2014-3-23 16:59 编辑

//需求:获取两个字符串中最大相同字串
class  StringTest4
{
        public static String getMaxString(String str1,String str2)

        {
                for (int x=0;x<str2.length() ;x++ )
                {
                        for (int y=0,z=str2.length()-x;z!=str2.length()+1 ;y++,z++ )
                        {
                                String temp= str2.substring(y,z);//str2的子串
                        
                                if(str1.contains(temp))
                                        return temp;
                        }
                }
        return null;//为什么此处要返回null???
        }

        public static void main(String[] args)
        {
                String str1="waoeouehellouwhuiuoq";
                String str2="sheuhelloiro";
                System.out.println("MaxString="+getMaxString(str1,str2));
        }
}
不明白为什么getMaxString 下面要返回null,返回null又怎么能获取最大字串?求亲们解答,谢谢··
作者: Sage    时间: 2014-3-22 16:44
  1. public class StringTest {

  2.         /**
  3.          * 获取两个字符串中最大相同字串
  4.          */
  5.         public static void main(String[] args) {
  6.                 String str1 = "waoeouehellouwhuiuoq";
  7.                 String str2 = "sheuhelloiro";
  8.                 System.out.println("MaxString=" + getMaxString(str1, str2));
  9.         }

  10.         public static String getMaxString(String str1, String str2)

  11.         {
  12.                 // String可以看成char[]
  13.                 for (int x = 0; x < str2.length(); x++) {
  14.                         for (int y = 0, z = str2.length() - x; z != str2.length() + 1; y++, z++) {
  15.                                 String temp = str2.substring(y, z); // temp:截取的相同字符串
  16.                                 if (str1.contains(temp)) { // 当前字符串是否包含截取的字符串
  17.                                         return temp; // 包含,则返回该截取的字符串temp
  18.                                 }
  19.                         }
  20.                 }
  21.                 return null;// 循环遍历结束,如不包含,则返回空;null指空引用,当然也可以用""表示,不过null更为恰当
  22.         }

  23. }
复制代码

作者: 李猛    时间: 2014-3-22 17:06
当返回null是表示字符串str2与字符串str1没有字符交集,也就是没有相同的字符。null并不是字符串,因为String不是基本数据类型,String是类,所以类定义的变量表示类引用,引用的值可以为空,所以返回值可以是null。这点不重要,现在可能你还没学到这章节,所以不必深入研究,等你接触就明白了,你现在只要知道他在该程序的作用就好了
作者: Mr.__ㄨīn    时间: 2014-3-22 17:35
  1. <span style="background-color: rgb(255, 255, 255);">public static String getMaxString(String str1,String str2)</span><div>{
  2.                 for (int x=0;x<str2.length() ;x++ )
  3.                 {
  4.                         for (int y=0,z=str2.length()-x;z!=str2.length()+1 ;y++,z++ )
  5.                         {
  6.                                 String temp= str2.substring(y,z);//str2的子串
  7.                         
  8.                                 if(str1.contains(temp))
  9.                                         return temp;
  10.                         }
  11.                 }
  12.         return null;
  13. }</div>
复制代码
1.return是返回方法的返回值,其类型要和方的保持一致函数中定义的是String类型,当for循环结束,没有获取最大相同的字符串时,不会有结果。但有定义的有返回值,所以要返回一个返回值。
2.renturn的用处就是结束当前域的操作。
当你获取到字符串时,执行if语句下的代码块return temp ,执行return之后会结束这个方法,也就不会运行到return null了。

作者: 郭黎明    时间: 2014-3-22 18:59
   public static String getMaxString(String str1,String str2)

        {
                for (int x=0;x<str2.length() ;x++ )
                {
                        for (int y=0,z=str2.length()-x;z!=str2.length()+1 ;y++,z++ )
                        {
                                String temp= str2.substring(y,z);//str2的子串
                        
                                if(str1.contains(temp))
                                        return temp;   //此处的temp即为要返回的String类型
                        }
                }
        return null;// 此处是为了防止报错
        }
作者: 赵彦丰    时间: 2014-3-22 19:41
if如果为真 直接就返回temp值  如果假 就表示没有相同字符串 就返回null, 这是一个程序员必须考虑的步骤
  1. public static String getMaxString(String str1,String str2)

  2.         {
  3.                 for (int x=0;x<str2.length() ;x++ )
  4.                 {
  5.                         for (int y=0,z=str2.length()-x;z!=str2.length()+1 ;y++,z++ )
  6.                         {
  7.                                 String temp= str2.substring(y,z);//temp:截取的相同字符串
  8.                         
  9.                                 if(str1.contains(temp))
  10.                                         return temp;   //此处的temp即为要返回的String类型
  11.                         }
  12.                 }
  13.         return null;//if如果为真 直接就返回temp值  如果假 就表示没有相同字符串 就返回null, 这是一个程序员必须考虑的步骤
  14.         }
复制代码

作者: yujiangjiao    时间: 2014-3-23 16:58
嗯,明白了,谢谢大家。




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