要求:
大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次。最长的定义是:最多单词数量,和单词中字母的数量无关。
统一输入文件名称:input1.txt, input2.txt
统一输出文件名称:output1.txt,output2.txt
程序需要考虑下列异常状况:
例如,文件不存在,你的程序会崩溃么,还是能优雅地退出并给用户提示信息?
如果文件没有任何单词、只有一个单词、没有可以首尾相连的单词,程序应该如何输出?
如果输入文件有一万个单词,你的程序能多快输出结果?
设计思想:
可以通过函数把每个单词的首尾字母存到数组里,然后就是字母进行比较配对啦。
1 package analyse_word; 2 import java.io.File; 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.PrintStream; 7 import java.util.Scanner; 8 public class letter_follow_each_other_best { 9 10 public static void OutputStream(String max) { 11 // 将数据写入文件 12 PrintStream ps = null; 13 try { 14 ps = new PrintStream(new FileOutputStream("D:\\empty.txt")); 15 //将标准输出重定向到ps输出流 16 System.setOut(ps); 17 //向标准输出输出一个字符串 18 System.out.println(max); 19 //向标准输出输出一个对象 20 } catch (IOException ex) { 21 ex.printStackTrace(); 22 } finally { 23 if (ps != null) { 24 ps.close(); 25 } 26 } 27 } 28 public static void main(String[] args) throws FileNotFoundException { 29 File file = new File("D:\\letter_follow_each_other_best.txt");// 读取文件 30 if (!file.exists()) { // 如果文件打不开或不存在则提示错误 31 System.out.println("文件不存在"); 32 return; 33 }else { 34 if(file.exists() && file.length() == 0) { 35 System.out.println("文件为空!"); 36 return; 37 } 38 } 39 long startTime = System.currentTimeMillis(); 40 String[] strs=new String[1000000]; 41 Scanner x = new Scanner(file); 42 int i=0; 43 boolean flag=false; 44 while(x.hasNextLine()) { 45 String[] str=x.nextLine().split("\\W+"); 46 for(int ms=0;ms2) { 48 flag=false; 49 // System.out.println(str[ms]); 50 if(i!=0) { 51 for(int t=0;t max.length()) { 87 max = sentence; 88 } 89 } 90 91 } 92 long endTime = System.currentTimeMillis(); 93 System.out.println(endTime-startTime+"ms"); 94 System.out.println(i); 95 if(max.length()!=0) { 96 OutputStream(max); 97 }else { 98 System.out.println("没有首尾相连"); 99 }100 101 }102 }