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