编程成语接龙

                                           成语接龙

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

  

原文地址:https://www.cnblogs.com/ysh09-04/p/8461945.html