课堂练习01题目:计算最长英语单词链
大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次。最长的定义是:最多单词数量,和单词中字母的数量无关。
首先构思如何编写该题目,首先要获取文件中的字母集合,通过循环嵌套,用key表示尾字母,然后一一使用循环判断是否可以形成链。将形成的链存储到一个总的List中。
随后在经过for循环判断每天链的长度进行比较得出最长的单词链进行输出。添加至文件中。关闭文件。
package file; import java.io.*; import java.util.*; public class Piao { public static void main(String[] args) throws FileNotFoundException, IOException { // TODO 自动生成的方法存根 File file = new File("D:\\input1.txt"); File file2 = new File("D:\\output1.txt"); if (!file.exists()) { System.out.println("文件不存在!"); } else if (file.exists() && file.length() == 0) { System.out.println("文件为空!"); } //判断是否文件为空 else { BufferedReader br = new BufferedReader(new FileReader(file)); BufferedWriter bw = new BufferedWriter(new FileWriter("D:/output1.txt")); String s; int i, j; ArrayList<ArrayList<String>> listall = new ArrayList(); String key; s = br.readLine(); //将文本文件中的所有信息变为字符串 String[] s1 = s.split(" ");//以空格为分割划分每个单词 if (s1.length == 1) System.out.println("单词数为1"); else { for (i = 0; i < s1.length; i++) { System.out.println(s1[i]); }//测试录入 for (j = 0; j < s1.length; j++) { ArrayList<String> list = new ArrayList<String>(); key = s1[j].substring(s1[j].length() - 1); list.add(s1[j]); System.out.println("key:" + key); for (i = 1; i < s1.length; i++) { if (key.equals(s1[i].substring(0, 1))) { list.add(s1[i]); key = s1[i].substring(s1[i].length() - 1); } else continue; } listall.add(list); } int max = 0; int count = 0; for (i = 0; i < listall.size(); i++) { if (max < listall.get(i).size()) { max = listall.get(i).size(); count = i; } } System.out.println("排位" + count); System.out.println("最长单词链为:"); for (i = 0; i < listall.get(count).size(); i++) { System.out.println(listall.get(count).get(i)); bw.write(listall.get(count).get(i)); bw.write(" "); } br.close(); bw.close(); } } } }