成语接龙
1.代码模块
1.1.定于全局属性
static List<String> ceyus=new ArrayList<String>();//获取所有的词语 static List<String> shous=new ArrayList<String>();//获取词语的手首字母 static List<String> weis=new ArrayList<String>();//获取词语的尾字母 static Map<Integer, Integer> yiyang=new HashMap<Integer, Integer>();//获取有成语接龙关系的俩组的数字管理 static List<Integer> pmuns=new ArrayList<Integer>();//获取从有关联到结束的最大管理数目 static List<Object> yiyou=new ArrayList<Object>();//获取已经有关联的标记,防止死循环
1.2 获取首,尾字母和关联的数字组合的map关系
for(int i=0;i<ceyus.size();i++){ shous.add(ceyus.get(i).substring(0, 1)); weis.add(ceyus.get(i).trim().substring(ceyus.get(i).length()-1)); } for(int i=0;i<weis.size();i++){ for(int j=1;j<shous.size();j++){ if(weis.get(i).trim().equals(shous.get(j).trim())){ yiyang.put(i, j); } } }
1.3 获取每组有关联的最大关联组数
for(Object o1:yiyang.keySet()){ int p=0; int pmun=1; boolean flat=true; p=yiyang.get(o1); //获取关联的最大组数 while(flat){ int p1=0; for(Object o:yiyang.keySet()){ if(!yiyou.contains(o)){ if(o.equals(p)){ p=yiyang.get(o); p1++; pmun++; yiyou.add(o); break; } } } if(p1==0){ flat=false; } } pmuns.add(pmun); }
1.4 获取最大关联组的信息
int max=pmuns.get(0); int maxmun=0; for(int i=1;i<pmuns.size();i++){ if(max<pmuns.get(i)){ max=pmuns.get(i); maxmun=i; } } int p9=yiyang.get(maxmun); String ce=ceyus.get(maxmun)+"--"+ceyus.get(p9); yiyou.clear();
yiyou1.add(yiyang.get(maxmun));
yiyou.add(0);
boolean flat1=true; //获取最大组的管理内容 while(flat1){ int p1=0; for(Object o:yiyang.keySet()){ if(!yiyou.contains(o)&&!yiyou1.contains(yiyang.get(o))){ if(o.equals(p9)){ p9=yiyang.get(o); ce=ce+"--"+ceyus.get(yiyang.get(o)); p1++; yiyou.add(o);
yiyou1.add(yiyang.get(o)); break; } } } if(p1==0){ flat1=false; } } //输出最大关联的内容 System.out.println("文件中最大的词语接龙为:"+ce);
1.5 处理文件的相关信息
/判断文件是否存在 if(file.exists()){ FileReader fileReader=new FileReader(file); int aa; aa=fileReader.read(); String ceyu=""; //将得到的文件信息根据自己想要的进行处理 while(aa!=-1){ char cc=(char) aa; if(cc>='A' && cc<='Z' || cc>='a' && cc<='z'){ ceyu=ceyu+cc; }else{ if(ceyu!=""&&ceyu!=null){ ceyus.add(ceyu); } ceyu=""; } aa=fileReader.read(); } fileReader.close(); shouwei(); getman(); getceyu(); }else{ System.out.println("你要找的文件不存在"); }
2.编写思路
首先,先判断文件是否存在,接着获取文件中的单词,接着获取首,尾字母,接着对首尾字母进行比较,将一样的存入map中,先判断是否已经使用过了,接着进行循环,
比较当前的value是否个循环key的一样,如果一样,value的值转换为key中的value,以此进行到结束,并且统计使用单词的连接的次数。最近进行比较选择出连接次数的的一
组,并且将这一组的单词连接出来,并且显示出来。
3.总结
这次编写的话,刚开始的思路是先获取首尾进行比较,然后统计数目,但是这样觉得会一直挂着for循环,导致思路的不清晰,后来先把所有有关联的组拉出来,然后对组内进行
循环判断。这样可以减少循环的次数。此次编程可以处理首字母不相同的成语接龙,但是如果有首字母相同的话,只会处理最后的一种,可能会导致了会出现错误。所以该项目并不是
很好还有一些错误没有处理。