課堂練習-詞語接龍

你們常常玩成語接龍遊戲,咱們試一試英語的接龍吧:一個文本文件中有N 個不一樣的英語單詞, 咱們可否寫一個程序,快速找出最長的能首尾相連的英語單詞鏈,每一個單詞最多隻能用一次。最長的定義是:最多單詞數量,和單詞中字母的數量無關。java

例如, 文件裏有:app

Applespa

Zoo設計

Elephantcode

Underorm

Foxblog

Dog遊戲

Moonci

Leafrem

Tree

Pseudopseudohypoparathyroidism

最長的相連英語單詞串爲:  apple - elephant – tree,  輸出到文件裏面,是這樣的:

Apple

Elephant

Tree

統一輸入文件名稱:input1.txt, input2.txt

統一輸出文件名稱:output1.txt,output2.txt

程序須要考慮下列異常情況:

例如,文件不存在,你的程序會崩潰麼,仍是能優雅地退出並給用戶提示信息?

若是文件沒有任何單詞、只有一個單詞、沒有能夠首尾相連的單詞,程序應該如何輸出?

若是輸入文件有一萬個單詞,你的程序能多快輸出結果?

要求將設計思想、代碼實現、實現截圖、我的總結以博文的形式發表。

設計思想:

     將單詞存到list容器中,以後先獲取到第一個單詞的首、尾字母,以後再循環中獲取下一個單詞的首尾字母,讓第一個單詞的尾字母與第二個單詞的尾字母比較,若是相同,則將第二個單詞的首位字母賦值給第一個單詞的首位字母的變量,以此類推。

實驗代碼:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class Text_2 {
static int N=5;
static String b[]=new String[500];
public static void main(String[] args) 
    {
        
        
        String sz=writeFromFile.readTxtFile("input3.txt");
        String ltxt=null;
        if(sz==null)
        {
            System.out.println("找不到指定的文件"); 
        }
        else if(sz=="kong")
        {
            System.out.println("文件爲空!");  
        }
        
        else
        {
            System.out.println(ltxt=StatList1(sz)); 
            
            select(b);
        }
        
        try {
        writeFromFile.daochu(ltxt);
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        
        

    }
public static int woor(String a)
    {
        int n=0;
        File ctoFile = new File("stopword.txt");
        InputStreamReader rdCto;
        try {
            rdCto = new InputStreamReader(new FileInputStream(ctoFile));
            BufferedReader bfReader = new BufferedReader(rdCto);
            String txtline = null;
            try {
                while ((txtline = bfReader.readLine()) != null) 
                {
                    if(txtline.equals(a))
                        {
                            n=1;
                        }
                }
                bfReader.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
             
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return n;
    }
public static ArrayList<String> getFiles(String path) {
        ArrayList<String> files = new ArrayList<String>();
        File file = new File(path);
        File[] tempList = file.listFiles();
        for (int i = 0; i < tempList.length; i++) {
            if (tempList[i].isFile()) {
                files.add(tempList[i].toString());
            }
            if (tempList[i].isDirectory()) {
            }
        }
        return files;
    }
public static String StatList1(String str) {
        StringBuffer sb = new StringBuffer();
        HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打開一個哈希表
        String[] slist = str.split("[^a-zA-Z\']+");
        for (int i = 0; i < slist.length; i++) 
        {
            if (!has.containsKey(slist[i])) 
            { 
                   has.put(slist[i], 1);
            } 
            else 
            {
                   has.put(slist[i],has.get(slist[i])+1 );
            }
        }
        Iterator<String> iterator = has.keySet().iterator();
        String a[]=new String[500];
        int s[]=new int[500];
        int judge;
        int n=400;
        for(int i=0;i<n;i++)
        {
            iterator = has.keySet().iterator();
            while(iterator.hasNext())
            {
                String word = (String) iterator.next();
                if(s[i]<has.get(word))
                {
                    s[i]=has.get(word);
                    a[i]=word;
                    b[i]=word;
                }
             }
            judge=woor(a[i]);
            if(judge==1)
            {
                n++;
                has.remove(a[i]);
            }
            else
            {
//                System.out.println(a[i]+"6666");
//             sb.append("單詞:").append(a[i]).append(" 次數").append(has.get(a[i])).append("\r\n");
             has.remove(a[i]);
            }
        }
             return sb.toString();
        }
public static void select(String b[])
    {
        List<Object> list=new ArrayList<>();
        int q=0;
        int n0=0;
        for(int i=0;i<b.length;i++)
        {
            if(b[i]!=null)
            {
                n0++;
            }
        }
        if(n0==1)
        {
            System.out.println("只有一個單詞");
        }
        else
        {
            String c="and";
            q=c.length();
            char n1=c.charAt(0);
            char n2=c.charAt(q-1);
            list.add(c);
            for(int j=0;j<b.length;j++)
            {
                String w=b[j];
                if(w!=null)
                {
                    int e=w.length();
                    char n3=w.charAt(0);
                    char n4=w.charAt(e-1);
                    if(n2==n3)
                    {
                        list.add(w);
                        n1=n3;
                        n2=n4;
                    }
                }
                
            }
            String l=null;
            if(list.size()==1)
            {
                System.out.println("沒有首尾相連");
            }
            else
            {
            for(int i=0;i<list.size();i++)
            {
                l=l+list.get(i)+"->";
                System.out.println(list.get(i)+"->");
            }
            try {
                daochu(l);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            }
        }
        
        
    }
    public static void daochu(String a) throws IOException
    {
        File file =new File("output1.txt");
        Writer out =new FileWriter(file);
        String data=a;
        out.write(data);
        out.close();

    }


    
    


}

實驗截圖:

相關文章
相關標籤/搜索