成语接龙
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循环,导致思路的不清晰,后来先把所有有关联的组拉出来,然后对组内进行
循环判断。这样可以减少循环的次数。此次编程可以处理首字母不相同的成语接龙,但是如果有首字母相同的话,只会处理最后的一种,可能会导致了会出现错误。所以该项目并不是
很好还有一些错误没有处理。