zoukankan      html  css  js  c++  java
  • 编程成语接龙

                                               成语接龙

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

      

  • 相关阅读:
    13-7实现旅拍卡片布局-2
    13-6实现旅拍卡片布局-1
    13-5实现旅拍瀑布流布局-2
    13-4实现旅拍瀑布流布局-1
    13-3使用TabBar+TabBarView 实现旅拍可滑动切换多Tab
    13-2根据接口实现dao层
    13-1
    12-12本章小结
    12-11【锦上添花】Flutter AI只能语音搜索功能实现
    12-10【收货果实】Futter AI只能语音界面开发-2
  • 原文地址:https://www.cnblogs.com/ysh09-04/p/8461945.html
Copyright © 2011-2022 走看看