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

最长的定义是:最多单词数量,和单词中字母的数量无关。

二、题目要求:

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

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

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

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

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

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

 

package lianxi1;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class jielong {

    public static void main(String[] args)
    {
        String now="";
        List<String> l=new ArrayList();
        List<List<String>> ls=new ArrayList<List<String>>();
        int l_i=0,ls_i=0;
        int i=0,t=0,flag=0,max=0;
        try
        {    
            //File file=new File("input1.txt");
            File file=new File("C:\\Users\\the body knew words\\Desktop\\input1.txt");
            File file2=new File("C:\\Users\\the body knew words\\Desktop\\output1.txt");
            if(!file.exists())
            {
                System.out.println("文件不存在!");
                return;
            }
            else if(file.exists() && file.length() == 0) { 
                System.out.println("文件为空!");
                return;
            } 
            BufferedReader br=new BufferedReader(new FileReader(file));
            String p7;
            p7=br.readLine();
            String []p6=p7.split(" ");
            if(p6.length==1){
                System.out.println("仅有一个单词!");
                return;
            }
            FileReader fr=new FileReader("C:\\Users\\the body knew words\\Desktop\\input1.txt");

            Scanner in =new Scanner(fr);
            //初始化
            System.out.print("2");
            //读取
            while(in.hasNext())
            {
                now=in.next();
                System.out.println(now);
                if(flag==0)
                {
                    l=new ArrayList();
                    l.add(now);
                    ls.add(l);
                    flag=1;
                }
                else
                {
                    for(i=0;i<ls.size();i++)//遍历所有表
                    {
                        if(ifLian(ls.get(i).get(ls.get(i).size()-1),now))//首尾相连
                        {
                            l=new ArrayList();
                            l=ls.get(i);
                            l.add(now);
                            ls.set(i, l);
                        }

                    }
                    l=new ArrayList();
                    l.add(now);
                    ls.add(l);
                }
                
            }
            
            //寻找最大
            max=ls.get(0).size();
            for(i=0;i<ls.size();i++)
            {
                if(max<ls.get(i).size())
                {
                    max=ls.get(i).size();
                }
            }
            
            for(i=0;i<ls.size();i++)
            {
                for(t=0;t<ls.get(i).size();t++)
                {
                    System.out.print(ls.get(i).get(t)+" ");
                }
                System.out.println();
            }
            PrintWriter fw=new PrintWriter("C:\\Users\\the body knew words\\Desktop\\output1.txt");
            for(i=0;i<ls.get(max).size();i++)
            {
                fw.println(ls.get(i)+" ");
            }
            fw.flush();
            fw.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        

    }
    public static boolean ifLian(String a,String b)//a的结尾与b的开头是否一致   apple
    {
        if(a.charAt(a.length()-1)==b.charAt(0))
        {
            return true;
        }
        else
        {
            return false;
        }
            
            
    }

}
View Code

 

posted on 2023-02-27 21:59  XiSoil  阅读(11)  评论(0编辑  收藏  举报