计算最长英语单词链

实验要求:

大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次。最长的定义是:最多单词数量,和单词中字母的数量无关。

统一输入文件名称:input1.txt, input2.txt

统一输出文件名称:output1.txt,output2.txt

程序需要考虑下列异常状况:

例如,文件不存在,你的程序会崩溃么,还是能优雅地退出并给用户提示信息?

如果文件没有任何单词、只有一个单词、没有可以首尾相连的单词,程序应该如何输出?

如果输入文件有一万个单词,你的程序能多快输出结果?

设计思想:将文件中的单词存入ArrayList数组中,分为前后两个数组,读入单词,经单词字母分解并且通过循环比较单词字母是否相同,相同写入结果文件,不同继续比较,直至找到最大接龙单词长度。

实验代码:

package com.piao;

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

 

public class test00 {

 

      public static void main(String[] args) throws IOException {

            

 

             String filename ="d:\\input.txt";

             File  a=new  File(filename);

       //judeFileExists(a);

       if(judeFileExists(a))

             {

                    danci(filename);

             }

       else

          {}

           

            

      }

 

      public static void danci(String s) throws IOException {

               

                    BufferedReader br = new BufferedReader(new FileReader(s));

                    StringBuffer sb = new StringBuffer();

                    String text = null;

                    if ((text = br.readLine()) != null) {

                           sb.append(text);// 将读取出的字符追加到stringbuffer中

                    }else {

                           System.out.println("input.text为空请检查");

                    }

                    br.close(); // 关闭读入流

                    String str = sb.toString().toLowerCase(); // 将stringBuffer转为字符并转换为小写

                    String[] words = str.split("[^(a-zA-Z)]+"); // 非单词的字符来分割,得到所有单词

                    StringBuffer yao = new StringBuffer();

                    String b1=words[0];

                    yao.append(b1);

                    yao.append(" ");

                    //System.out.println(b1);

                    String end=b1.substring(b1.length()-1,b1.length());

                 //System.out.println(end);

                for(int i=1;i<words.length;i++)

                { 

                 String start=words[i].substring(0,1);

                 if(end.equals(start))

                 {

                       end=words[i].substring(words[i].length()-1,words[i].length());

                       yao.append(words[i]);

                       yao.append(" ");

                 }

                }

               

               // for( String a:words)

               // {

                     //  System.out.println(a);

             //   }

              //  System.out.println(yao.toString());

                File file =new File("d:\\output.txt");

              try {

                   file.createNewFile();

              } catch (IOException e) {

                 e.printStackTrace();     

             }

           

              try {

                  

                     FileWriter fw =new FileWriter(file);

                     fw.write(yao.toString());

                     fw.flush();

                     fw.close();

              }

              catch (IOException e) {

                        e.printStackTrace();     

                    }

          

      }

 

 

// 判断文件是否存在

public static boolean judeFileExists(File file) {

 

    if (file.exists()) {

        System.out.println("查看ouput.text");

        return true;

    } else {

        System.out.println("文件不存在");

        // try {

        //     file.createNewFile();

       //  } catch (IOException e) {

       // TODO Auto-generated catch block

      //      e.printStackTrace();     

     //   }

        return false;

    }

}

}

实验截图:

 

 

 

 

总结:此次实验借鉴了别人的代码,对文件的输入输出流更加熟练。

posted @ 2019-06-09 19:08  Caper123  阅读(125)  评论(0)    收藏  举报