首页 > 其他分享 >课堂练习01题目:计算最长英语单词链。

课堂练习01题目:计算最长英语单词链。

时间:2023-02-27 18:57:46浏览次数:50  
标签:文件 01 英语单词 课堂练习 System println new txt out

 

一、题目内容:

大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次。

最长的定义是:最多单词数量,和单词中字母的数量无关。

二、题目要求:

1、统一输入文件名称:input1.txt, input2.txt

2、统一输出文件名称:output1.txt,output2.txt

3、程序需要考虑下列异常状况:

(1)例如,文件不存在,你的程序会崩溃么,还是能优雅地退出并给用户提示信息?

(2)如果文件没有任何单词、只有一个单词、没有可以首尾相连的单词,程序应该如何输出?

(3)如果输入文件有一万个单词,你的程序能多快输出结果?

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class english {
    public static void main(String []srgs){

        File file = new File("C:\\Users\\DELL\\Desktop\\资料\\JAVA TWO\\input.txt");
        System.out.println("判断文件格式是否正确:");
        if(file.exists() && file.length() == 0) {
            System.out.println("  文件为空!");
            System.exit(0);
        } else if(oneWord()){
            System.out.println("  文件只有一個單詞!");
            System.exit(0);
        }else{
            System.out.println("  文件内容有效。");
            achieve();
        }
    }
    public static boolean oneWord(){
        ArrayList<String> list = new ArrayList<String>();
        String pathname = "C:\\Users\\DELL\\Desktop\\资料\\JAVA TWO\\input.txt";
        int i = 0;
        try (
                FileReader reader = new FileReader(pathname);
                BufferedReader br = new BufferedReader(reader)
                // 建立一个对象,它把文件内容转成计算机能读懂的语言
        ) {
            String line;
            //网友推荐更加简洁的写法
            while ((line = br.readLine()) != null) {
                // 一次读入一行数据
                list.add(line);
                i++;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        if(i<=1){
            return true;
        }else{
            return false;
        }
    }

    /*
     * 获取单词首尾字母的方法
     */
    public static void print(){
        String a = "sadfg";
        System.out.println(a.substring(0,1));//获取首字母
        System.out.println(a.substring(a.length()-1,a.length()));//获取尾字母
    }


    /*
     * 读取txt文件,并且存到ArrayList集合中,找出接龙单词 存入ArrayList1集合,
     * 把ArrayList1集合写入output1文件
     */
    public static void achieve() {
        ArrayList<String> list = new ArrayList<String>();
        ArrayList<String> list1 = new ArrayList<String>();//存储遍历结果

        String pathname = "C:\\Users\\DELL\\Desktop\\资料\\JAVA TWO\\input.txt"; // 绝对路径或相对路径都可以,写入文件时演示相对路径,读取以上路径的input.txt文件
        String writename = "C:\\Users\\DELL\\Desktop\\资料\\JAVA TWO\\output.txt";
        //防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw;
        //不关闭文件会导致资源的泄露,读写文件都同理
        //Java7的try-with-resources可以优雅关闭文件,异常时自动关闭文件;详细解读https://stackoverflow.com/a/12665271
        try (FileReader reader = new FileReader(pathname);
             BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言
             FileWriter writer = new FileWriter(writename);
             BufferedWriter out = new BufferedWriter(writer)
        ) {
            String line;
            //网友推荐更加简洁的写法
//            System.out.println("遍历readline");
            while ((line = br.readLine()) != null) {
                // 一次读入一行数据
//                System.out.println(line);
                list.add(line);
            }
            System.out.println("遍历所有单词集合(arraylist):");
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i));
            }


            String word0 = list.get(0);
            list1.add(word0);
            String word = " ";//用来存储单词
            for(int j = 1;j < list.size();j++){
                word = list.get(j);
                if(word.substring(0,1).equals(word0.substring(word0.length()-1,word0.length())) )
                //不能用“==”判断字符串的等价,要用equals!!!!!!!!!!!!!!!!!!!!!!!!
                {
                    list1.add(word);
                    word0 = word;
                }
            }
            //打印list1
            System.out.println("遍历list1");
            //把list1中的结果写入output1.txt文件
            for (int g = 0; g < list1.size(); g++){
                System.out.println(list1.get(g));
                out.write(list1.get(g));
                out.write(" ");
            }

            System.out.println("程序结束!");


        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /*
     * txt文件的读取
     */
    public static void readFile() {
        String pathname = "input.txt";
        //不关闭文件会导致资源的泄露,读写文件都同理
        //Java7的try-with-resources可以优雅关闭文件,异常时自动关闭文件;详细解读https://stackoverflow.com/a/12665271
        try (FileReader reader = new FileReader(pathname);
             BufferedReader br = new BufferedReader(reader) // 建立一个对象,它把文件内容转成计算机能读懂的语言
        ) {
            String line;
            while ((line = br.readLine()) != null) {
                // 一次读入一行数据
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /*
     *txt文件的写入
     */
    public static void writeFile() {
        try {
            File writeName = new File("C:\\Users\\DELL\\Desktop\\资料\\JAVA TWO\\output.txt");
            writeName.createNewFile(); //创建新文件,有同名的文件的话直接覆盖
            try (
                    FileWriter writer = new FileWriter(writeName);
                    BufferedWriter out = new BufferedWriter(writer)
            ) {
                out.write("我会写入文件啦!\r\n"); // \r\n为换行
                out.flush(); // 把缓存区内容压入文件
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}

 

标签:文件,01,英语单词,课堂练习,System,println,new,txt,out
From: https://www.cnblogs.com/yzx-sir/p/17161462.html

相关文章

  • pat乙级1014 福尔摩斯的约会
    #include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>intmin(inta,intb);intmin(inta,intb){returna<b?a:b;}intmain(){......
  • 01 列表类型
    #1、作用:按位置存放多个值#2、定义#l=[1,1.2,'a']#l=list([1,1.2,'a'])#print(type(l))#3、类型转换:但凡能够被for循环遍历的类型都可以当做参数传给list()转成列......
  • 一切都与进制有关【USACO 2015 January Contest Bronze】
    一切都与进制有关奶牛贝茜一直在她的牛栏中学习计算机课,最近她在致力于学习不同进制下的数字表示。回想一下,B进制数字的数位从右到左依次代表1,B,B2,B3等等。例如,在......
  • 01 集合
    #1、作用#1.1关系运算#friends1=["zero","kevin","jason","egon"]#friends2=["Jy","ricky","jason","egon"]##l=[]#forxinfriends1:#ifxinfriends2:......
  • 计算最长英语单词链课堂测试
    从一段英语文本中将每个单词分离出来,并且找到最长英语单词链。具体问题如下:大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N个不同的英语单词,我们能否写......
  • 01 可变不可变类型
    #1、可变不可变类型#可变类型:值改变,id不变,证明改的是原值,证明原值是可以被改变的#不可变类型:值改变,id也变了,证明是产生新的值,压根没有改变原值,证明原值是不可以被修改......
  • 一文搞懂weblogic CVE-2018-2628原理与利用
    参考:http://xxlegend.com/2018/06/20/CVE-2018-2628简单复现和分析/在CVE-2017-3248的利用中,我们用ysoserial生成了一个java.rmi.registry.Registry类型的proxy首先回......
  • 四川九联代工M301H hi3798 mv300 mt7668魔百和 强刷和TTL线刷(救砖)经验分享
    以下都是本次自己操作后的一些经验,不是技术分享,也是看来很多水教程后总结的精华。四川九联代工M301Hhi3798mv300mt7668魔百和 一、强刷1.强刷的教程网上有很多,自己......
  • Python文件操作01 t模式
    如何用文件:open()和withopen()as控制文件读写内容的模式:t和b强调:t和b不能单独使用,必须跟r/w/a连用t文本(默认的模式)1......
  • 当一名程序员的准备工作-001
    1.做什么类型的程序员​ 在大家对于程序员这门行业的好奇时,并且想学习那就要知道程序员也有很多类型.比如:前端开发后端开发算法工程师AI智能游戏开发等等不管你......