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