今天下午软件工程两节课的教导让我受益匪浅,程序=数据结构+算法,这告诉我们编程主要注重的是思想,其次才是写代码,写代码我们多加练习总是能够写出来的,但我们要是缺少了解决问题的思想,那么你连写代码的前提都没有。正如今天下午的课堂测试:

 

 拿到题目的第一时间我们首先应该思考如何做这个程序,而不是直接开始编码,更不能去抄别人的代码

以下是我的思路:

1.以空格为划分将单词存入数组

2.将单词的首位和末位分别存入数组

3.将末位和下一个单词的首位进行比较,如果相同存入数组

4.继续比较遇见不同的,从不同开始相同的单词存入新数组

5.新数组遇见不同时比较两数组长度,长度短的数组清空

6.重复3,4,5步骤直到筛选出最长单词链

7.将最长链存入数组

 

源码:

 1 package English;
 2 
 3 import java.io.*;
 4 import java.util.*;
 5 
 6 
 7 
 8 
 9 public class word {
10 
11     public static void main(String[] args)throws FileNotFoundException, IOException  {
12         // TODO 自动生成的方法存根
13 
14         File file=new File("C:/Users/wuwang/OneDrive/桌面/123.txt");
15 
16         if(!file.exists())
17         {
18             System.out.println("文件不存在!");
19         }
20         else if(file.exists() && file.length() == 0) {
21             System.out.println("文件为空!");
22         } //判断是否文件为空
23         else
24         {
25             BufferedReader br=new BufferedReader(new FileReader(file));
26             BufferedWriter bw = new BufferedWriter(new FileWriter("C:/Users/wuwang/OneDrive/桌面/output3881.txt")) ;
27 
28 
29             String s;
30             int i,j;
31             ArrayList<ArrayList<String>> listall=new ArrayList();
32             String key;
33             int m=0;
34             s=br.readLine();
35             //将文本文件中的所有信息变为字符串
36             String []s1=s.split(" ");//以空格为分割划分每个单词
37             String s2= new String();
38             if(s1.length==1)
39                 System.out.println("单词数为1");
40              else
41             {
42                 for(i=0;i<s1.length;i++)
43                 {
44                     System.out.println(s1[i]);
45                 }
46                 for(j=0,i=j+1;j<s1.length;j++,i++)
47                 {
48                     ArrayList<String> list=new ArrayList<String>();
49                     key=s1[j].substring(s1[j].length()-1);
50 
51                     list.add(s1[j]);
52                     System.out.println("key:"+key);
53                     for(i=1;i< s1.length;i++) {
54                         if (key.equals(s1[i].substring(0, 1))) {
55                             list.add(s1[i]);
56                             key = s1[i].substring(s1[i].length() - 1);
57                             s2=list.toString();
58                             System.out.println(s2);
59                         }else{
60                                 continue;
61                         }
62                     }
63 
64                     listall.add(list);
65                 }
66                 int max=0;
67                 int count=0;
68 
69                 for(i=0;i<listall.size();i++)
70                 {
71                     if(max<listall.get(i).size())
72                     {
73                         max=listall.get(i).size();
74                         count=i;
75                     }
76                 }
77                 System.out.println("最长单词链为:"+listall.get(count).size());
78                 for(i=0;i<listall.get(count).size();i++)
79                 {
80                     System.out.println(listall.get(count).get(i));
81                     bw.write(listall.get(count).get(i));
82                     bw.write(" ");
83                 }
84                 br.close();
85                 bw.close();
86             }
87         }
88     }
89 }

此代码存在问题,遇见不同的单词不能跳出循环!后续还需要加以改进。