• 最长英语单词链


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

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

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

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

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

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

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

    实验源码

    package 数组;
    
    import java.awt.geom.Area;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.OutputStream;
    
    public class dancilian {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    //String[] A={"apple","zoo","elephant","under","fox","dog","moon","leaf","tree"};
    dancilian a=new  dancilian();
    File file = new File("E:/input1.txt");
    String b=a.read(file);
    String[] A =b.split(" ");
    
    String[] f;
    String[] l;
    String[] end;
    f=a.first(A);
    l=a.last(A);
    end=a.jielong(A, l, f);
    
    for(int i=0;i<3;i++)
    System.out.println(end[i]);
    try {
        a.write(end);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
        }
        public String[] first(String[] A)//返回首字母数组
        {
            String[] F= new String[A.length];
            for(int i=0;i<A.length;i++)
            {
                F[i]=A[i].substring(0,1);
                }
            return F;
            
        }
        
        public String[] last(String[] A)//返回尾字母数组
        {
            String[] L= new String[A.length];
            for(int i=0;i<A.length;i++)
            {
                L[i]=A[i].substring(A[i].length()-1);
                }
            return L;
            
        }
    public String[] jielong(String[] A,String[] L,String[] F)//获取接龙字母
    {
        String[] end=new String[A.length];
        int  k=0;
             end[0]=A[0];
             for(int j=0;j<A.length;j++)
             {
                 
             if((end[k].substring(end[k].length()-1)).equals(F[j]))
             {
                 //System.out.println(end[k].substring(end[k].length()-1));
                     end[++k]=A[j];
             
             }
             }
             
        return end;
        
    }
    public String read(File file){//读出文件
        StringBuilder result = new StringBuilder();
        try{
            BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
            String s = null;
            while((s = br.readLine())!=null){//使用readLine方法,一次读一行
                result.append(System.lineSeparator()+s);
            }
            br.close();    
        }catch(Exception e){
            e.printStackTrace();
        }
        return result.toString();
    }
    public void write(String[] str) throws Exception{//写入文件
        //在d盘上创建一个名为testfile的文本文件
        File f = new File("E:/output1.txt");
        //用FileOutputSteam包装文件,并设置文件可追加
        OutputStream out = new FileOutputStream(f,true);
        //字符数组
        //String[] str = {"shanghai","beijing","guangdong","xiamen"};
        for(int i=0; i<str.length; i++){
        out.write(str[i].getBytes()); //向文件中写入数据
        out.write('
    '); // 
    表示换行
        out.write('
    '); 
        }
        out.close(); //关闭输出流
        System.out.println("写入成功!");
        }
    }
  • 相关阅读:
    软件实施工程师是一个什么样的工作?他的具体工作内容是什么?发展前景怎样?
    做金融(基金、证券)方面的软件实施工程师有没有发展前途?职业发展空间如何。
    做软件实施工程师的一点建议
    系统实施工程师主要工作职则
    软件实施工程师
    UE编辑器编译和运行java设置
    猜数字
    猜数字
    Problem G
    Problem G
  • 原文地址:https://www.cnblogs.com/zql98/p/10994996.html
Copyright © 2020-2023  润新知