• 计算最长单词链


    题目:

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

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

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

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

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

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

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

    设计思想:

    首先需要利用查找一个字符串(本题指单词)首尾字母的函数,刚开始自己选择的是substring(x,y),但是一直报错没有解决,后来询问同学,又学习了一种新的方法subSequence(),解决了这个问题。

    源代码:

    package test03;
    
    /*
     * 英语成语接龙
     * 
     * 读入input文件
     * 输出output文件
     * 第一单词尾字母
     * 其他单词首字母
     * 
     */
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import java.util.Scanner;
    
    public class test03 {
    
        public static void main(String[] args) throws IOException {
            File file = new File("D:\\JAVA\\java-1\\test02\\input.txt");// 读取文件
            if (!file.exists()) {// 如果文件打不开或不存在则提示错误
                System.out.println("文件不存在");
                return;
            }
            String[] strs=new String[1000000];
            Scanner x = new Scanner(file);
            int i=0;
            while(x.hasNext()) {
                strs[i]=x.next();
                i++;
            }
            String sentence = "";
            String word="";
            for(int m=0;m<i;m++) {
                sentence = strs[m];
                if(strs[m+1]==null)
                {
                    System.out.println("文件中单词只有一个"+strs[m]+",字母成语接龙不能进行!");
                }
                word = sentence;
                for(int j=m+1;j<i;j++) {
                    if(strs[j].toLowerCase().subSequence(0, 1).equals(word.toLowerCase().subSequence(word.length()-1, word.length()))) {
                        word = strs[j];
                        sentence+="->"+word;
                    }
                }
                if(sentence.indexOf("-")!=-1) {
                       String strOut = "D:\\JAVA\\java-1\\test02\\output.txt";
                       File file1 = new File(strOut);
                       if (!file1.exists()) {// 如果文件打不开或不存在则提示错误
                           System.out.println("文件不存在");
                           return;
                       }
                       FileOutputStream fos=new FileOutputStream(file1);
                       OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
                       osw.append(sentence);
                       osw.close();
                       fos.close();
                       break;
                }
                
            }
            System.out.println("运行成功!");
        }
    }

    运行截图:

  • 相关阅读:
    为CheckBoxList每个项目添加一张图片
    计算字符串中各个字符串出现的次数
    显示相同数字相乘的结果,直到数值大于150为止
    实例4 函数的引用调用
    嵌入式BootLoader技术内幕(二)
    实例2 关系和逻辑运算
    linux环境变量的系统设置
    嵌入式BootLoader技术内幕(三)
    supervivi的一点秘密
    Bootloader之vivi
  • 原文地址:https://www.cnblogs.com/Qi77/p/11062135.html
Copyright © 2020-2023  润新知