zoukankan      html  css  js  c++  java
  • 详细解释

    针对邹欣老师在我博客园随笔中提出的问题(博客园链接https://www.cnblogs.com/cuijunfeng/p/10988873.html),上次在评论里的解释有些词不达意,因此我专门写了一篇博客,首先是我对题意理解有误
    我博客园里的代码只是考虑到输入文件是问题中所给出的(Apple,Zoo,Elephant,Under,Fox,Dog,Moon,Leaf,Tree)这是一种十分理想化的文件,也就是说我的代码是从文件的第一个单词开始去寻找
    与他首尾相连的单词,而题目中让使用的文件也正好符合apple elephant tree ,这让我认为这段代码是正确的,其实只是运气好,如果最长的字符串的首元素不是文件的首字母,就会出现错误,下面是我对博客园里代码的注释
    核心代码说明:
    BufferedReader br = new BufferedReader(new FileReader(s))
    //创建字符缓冲输入流对象br

    StringBuffer sb = new StringBuffer()
    //实例化StringBuffer类sb

    String text = null
    //设置一个空字符串text

    while ((text = br.readLine()) != null) {
    sb.append(text);
    }
    //读取流数据,返回字符串。append()是往动态字符串数组后添加,就是x +y + z

    br.close();
    String str = sb.toString().toLowerCase()
    //将读到的数据转换为字符串,并且转换小写

    String[] words = str.split("[^(a-zA-Z)]+")
    //将上一步处理过的数据写入一个下标从零开始的words数组

    StringBuffer yao = new StringBuffer()
    //实例一个yao

    String b1=words[0]
    //将words数组的第一个赋值给字符串b1

    yao.append(b1)
    //输出b1

    yao.append(" ")

    String end=b1.substring(b1.length()-1,b1.length())
    //substring()方法可以将里面的两个长度中间间隔的字符传入字符串end
    //打个比方说一个apple的长度substring(5-1,5),该方法会将apple中第四到第五位的字符输出,也就是末尾项e

    for(int i=1;i<words.length;i++)
    //一个循环,将循环体从words[1]开始

    String start=words[i].substring(0,1)
    //将第二个数据,也就是words[1],使用一次substring()方法,此时将单词的首字母传入了start


    if(end.equals(start))
    {
    end=words[i].substring(words[i].length()-1,words[i].length());
    //用equals()方法判断是否字母首尾一致,若一致就将end再置为一个连接后的末尾字母,再用循环去找下一个首字母一样的单词
    yao.append(words[i]);
    //输出找到的可以连接的单词
    yao.append(" ");
    }


    也就是说,这段代码确实能找到一条最长的字符串,只不过只是在题目的特例下,但是核心的代码思想是没有问题的。
    解决方法________如果想确定找到的字符串是最长的,并且没有比他更长的字符串
    我们可以在String b1=words[0]//将words数组的第一个赋值给字符串b1 这段代码的位置加入的一个for循环,将文件中读取到每一个单词都进行一次赋值循环,这样就可以得到全部的有可能
    是最长的字符串,然后再将这些得到的待考量的字符串传入一个新的字符串数组去,最后用一个for循环对数据的.length进行比较,将最长的输出到文件中,这样一来输出的字符串必定是最大的。
    上次回复评论时确实没有考虑到这点问题,当时在eclipse中运行后得到的文件中的字符串和题目给出的标准完全一致,所以就忽视了代码中的问题,以至于回复的驴唇不对马嘴,这次您的评论确实
    让我深感惭愧,我以后在代码方面一定认真细心,不能囫囵吞枣,必须把借鉴来的东西吃透了,为自己所用,还有就是审题一定要全面,得到正确答案但并不一定是正确的运行过程,要多方面考虑真实
    存在的可能性。

     

  • 相关阅读:
    10个优秀HTML5网站案例赏析
    读书笔记之:More Exceptional C++ (2002) [++]
    函数模板与函数重载
    vector中元素的删除
    C++常用程序
    Linux下的示例程序
    要求或禁止在堆中产生对象
    读书笔记之:Effective C++ (2005)[++]
    读书笔记之:More Effective C++ (2007)[+]
    读书笔记之:Essential C++ (2001)[+]
  • 原文地址:https://www.cnblogs.com/cuijunfeng/p/11020565.html
Copyright © 2011-2022 走看看