java课程课后作业190606之计算最长英语单词链

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

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

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

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

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

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

 

这里虽然我实现了这个功能,但是算法的复杂度过高,并不是理想的算法,所以就不在阐述,只给出下面的异常情况处理

public class test {
    private static String WORDSUM = "";
    private static int num=0;
    static String[] TempSUM=null;
    public static void main(String[] args) throws Exception {
        

        // TODO Auto-generated method stub
        
        String[] temp={"apple","ant","ban","element","televetion","tv","ppt","nation"};
        
        File file = new File("C:/D/inmmmput.txt");
        boolean FileExists= judeFileExists(file);
        if(FileExists==false)
        {
            System.out.println("文件不存在............");
        }else {
            System.out.println("文件存在............");
            if(judeFileSize(file)==false)
            {
                System.out.println("文件没有内容...........");
            }
            else {
                ReadBook();
                String Maxnumber=run(TempSUM);
                WriteStringToFile(Maxnumber);
            }

        }
        

    }
    private static String run(String temp[]) {
        String MaxNumber=null;
        int Max=0;
        int get=0;
        if(temp.length>1)
        {
            for(int j=0;j<temp.length;j++)
            {
                System.out.println("开始的字母"+temp[j]);
                if(!temp[j].isEmpty())
                {
                    String number=temp[j];
                    
                    String numberLast=temp[j].substring(temp[j].length()-1, temp[j].length());
                    for(int i=j+1;i<temp.length;i++)
                    {
                        
                        if(!temp[i].isEmpty())
                        {
                            System.out.println("读取的单词"+temp[i]);
                            System.out.println("读取的单词开头字母"+temp[i].substring(0, 1));
                            System.out.println("上一个的单词结尾字母"+numberLast);
                            if(temp[i].substring(0, 1).equals(numberLast))
                            {
                                number=number+"--"+temp[i];
                                System.out.println("匹配成功连接"+number);
                            }
                            numberLast=number.substring(number.length()-1, number.length());
                            get++;
                        }
                        System.out.println(number);
                        if(Max<=get)
                        {
                            MaxNumber=number;
                            Max=get;
                            System.out.println("目前值"+get);
                    }
                        get=0;
}
                }

                System.out.println("最大值"+Max);
            }
            if(Max==1)
            {
                System.out.println("没有首尾相连啊");
            }
            return MaxNumber;
        }
        else {
            System.out.println("只有一个哦。。");
            return "null";
        }

    }
    // 判断文件是否存在
    public static boolean judeFileExists(File file) throws IOException {
          if (file.exists()) {
            
            return true;
            } else {
                
                return false;
            }
    }
    //判断文件的大小
    private static boolean judeFileSize(File file) {
        if(file.length()<=0)
        {
            return false;
        }
        else {
            return true;
        }
        
    }
    public static void WriteStringToFile(String number) throws IOException {
        try {
            String filePath="C:/D/output.txt";
            File file = new File(filePath);
            if(judeFileExists(file))
            {
                PrintStream ps = new PrintStream(new FileOutputStream(file));
                ps.println(number);// 往文件里写入字符串
                ps.close();
                System.out.println("已经写入文件");
            }
            else {
                System.out.println("输出文件不存在");
            }

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
    }
    public static void ReadBook()throws Exception
    {
        String book=book("C:/D/input.txt");
        System.out.println(book);
    }

    private static String book(String file) throws IOException
    {
        // TODO Auto-generated method stub
        File f=new File(file);
        BufferedReader bf=new BufferedReader(new FileReader(f));
        String content="";
        int lenth=0;
        int x=0;
        StringBuilder sb=new StringBuilder();
        String[] sum= {""};
        while(content!=null)
        {
            WORDSUM=WORDSUM+content;
            content= bf.readLine();
            if(content==null)
                break;
          
        }
        
        WORDSUM=WORDSUM.replace(".",",");
        WORDSUM=WORDSUM.replace(";",",");
        WORDSUM=WORDSUM.replace("!",",");
        WORDSUM=WORDSUM.replace("?",",");
        WORDSUM=WORDSUM.replace("-",",");
        WORDSUM=WORDSUM.replace("“",",");
        WORDSUM=WORDSUM.replace("”",",");
        WORDSUM=WORDSUM.replace("‘",",");
        WORDSUM=WORDSUM.replace("’",",");
        WORDSUM=WORDSUM.replace("(",",");
        WORDSUM=WORDSUM.replace(")",",");
        WORDSUM=WORDSUM.replace(":",",");
        WORDSUM=WORDSUM.replace("—",",");
        WORDSUM=WORDSUM.replace(" ",",");
        WORDSUM=WORDSUM.replace(" ",",");
        TempSUM = WORDSUM.split(",");
        
        return sb.toString();
    }

}
原文地址:https://www.cnblogs.com/heiyang/p/11005940.html