編程成語接龍


                                           成語接龍

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循環,導致思路的不清晰,后來先把所有有關聯的組拉出來,然后對組內進行
循環判斷。這樣可以減少循環的次數。此次編程可以處理首字母不相同的成語接龍,但是如果有首字母相同的話,只會處理最后的一種,可能會導致了會出現錯誤。所以該項目並不是
很好還有一些錯誤沒有處理。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM