一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次。最长的定义是:最多单词数量,和单词中字母的数量无关。

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

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

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

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

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

这里虽然我实现了这个功能,但是算法的复杂度过高,并不是理想的算法,所以就不在阐述,只给出下面的异常情况处理

public class test {
private static String WORDSUM = "";
private static int num=0;
static String[] TempSUM=null;
public static void main(String[] args) throws Exception { // TODO Auto-generated method stub String[] temp={"apple","ant","ban","element","televetion","tv","ppt","nation"}; File file = new File("C:/D/inmmmput.txt");
boolean FileExists= judeFileExists(file);
if(FileExists==false)
{
System.out.println("文件不存在............");
}else {
System.out.println("文件存在............");
if(judeFileSize(file)==false)
{
System.out.println("文件没有内容...........");
}
else {
ReadBook();
String Maxnumber=run(TempSUM);
WriteStringToFile(Maxnumber);
} } }
private static String run(String temp[]) {
String MaxNumber=null;
int Max=0;
int get=0;
if(temp.length>1)
{
for(int j=0;j<temp.length;j++)
{
System.out.println("开始的字母"+temp[j]);
if(!temp[j].isEmpty())
{
String number=temp[j]; String numberLast=temp[j].substring(temp[j].length()-1, temp[j].length());
for(int i=j+1;i<temp.length;i++)
{ if(!temp[i].isEmpty())
{
System.out.println("读取的单词"+temp[i]);
System.out.println("读取的单词开头字母"+temp[i].substring(0, 1));
System.out.println("上一个的单词结尾字母"+numberLast);
if(temp[i].substring(0, 1).equals(numberLast))
{
number=number+"--"+temp[i];
System.out.println("匹配成功连接"+number);
}
numberLast=number.substring(number.length()-1, number.length());
get++;
}
System.out.println(number);
if(Max<=get)
{
MaxNumber=number;
Max=get;
System.out.println("目前值"+get);
}
get=0;
}
} System.out.println("最大值"+Max);
}
if(Max==1)
{
System.out.println("没有首尾相连啊");
}
return MaxNumber;
}
else {
System.out.println("只有一个哦。。");
return "null";
} }
// 判断文件是否存在
public static boolean judeFileExists(File file) throws IOException {
if (file.exists()) { return true;
} else { return false;
}
}
//判断文件的大小
private static boolean judeFileSize(File file) {
if(file.length()<=0)
{
return false;
}
else {
return true;
} }
public static void WriteStringToFile(String number) throws IOException {
try {
String filePath="C:/D/output.txt";
File file = new File(filePath);
if(judeFileExists(file))
{
PrintStream ps = new PrintStream(new FileOutputStream(file));
ps.println(number);// 往文件里写入字符串
ps.close();
System.out.println("已经写入文件");
}
else {
System.out.println("输出文件不存在");
} } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
public static void ReadBook()throws Exception
{
String book=book("C:/D/input.txt");
System.out.println(book);
} private static String book(String file) throws IOException
{
// TODO Auto-generated method stub
File f=new File(file);
BufferedReader bf=new BufferedReader(new FileReader(f));
String content="";
int lenth=0;
int x=0;
StringBuilder sb=new StringBuilder();
String[] sum= {""};
while(content!=null)
{
WORDSUM=WORDSUM+content;
content= bf.readLine();
if(content==null)
break; } WORDSUM=WORDSUM.replace(".",",");
WORDSUM=WORDSUM.replace(";",",");
WORDSUM=WORDSUM.replace("!",",");
WORDSUM=WORDSUM.replace("?",",");
WORDSUM=WORDSUM.replace("-",",");
WORDSUM=WORDSUM.replace("“",",");
WORDSUM=WORDSUM.replace("”",",");
WORDSUM=WORDSUM.replace("‘",",");
WORDSUM=WORDSUM.replace("’",",");
WORDSUM=WORDSUM.replace("(",",");
WORDSUM=WORDSUM.replace(")",",");
WORDSUM=WORDSUM.replace(":",",");
WORDSUM=WORDSUM.replace("—",",");
WORDSUM=WORDSUM.replace(" ",",");
WORDSUM=WORDSUM.replace(" ",",");
TempSUM = WORDSUM.split(","); return sb.toString();
} }

java课程课后作业190606之计算最长英语单词链的更多相关文章

  1. Java课程课后作业190315之从文档中读取随机数并得到最大连续子数组

    从我上一篇随笔中,我们可以得到最大连续子数组. 按照要求,我们需要从TXT文档中读取随机数,那在此之前,我们需要在程序中写入随机数 import java.io.File; import java.i ...

  2. JAVA课程课后作业03之作业一

    作业:使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”. 代码: package TestJava; import java ...

  3. java课程课后作业190616之个人学期总结

    在团队开始的那一周,我们做了作品的功能畅想,在讲台上谈论了自己的产品可能会有的功能,比如说课程查找功能,空教室查找功能,霸屏功能,课程留言功能等,当然,随着开发的推进,我也发现了有些功能上实现的困难, ...

  4. java课程课后作业190425之一维数组最大子数组(界面实现)

    题目要求: 1.在第一个问题过程中,我在以前的代码中好像已经写出了这个功能,想要实现这个功能,我们只需要在我们储存的数组和是负数的时候对中转值进行重新赋值就可以得到新的数值的起始位置,而他的终了位置就 ...

  5. Java课程课后作业190309之连续最大子数组

    老师在课堂是提出了这个问题,并且提出了时间复杂度是O(n)的要求,一开始我自己思想简单,在逻辑上出现了十分粗心的错误,后来同学们也在课堂上比较激烈地讨论了一番,也只是将时间复杂度降到了O(n*n),在 ...

  6. java课程课后作业05之动手动脑

    一.使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件 此代码没有使用walkfiletree,两者的差别在于walkfiletree在遍历文件的时候有一 ...

  7. java课程课后作业04之动手动脑

    一.多层的异常捕获-1 先贴出代码: public class CatchWho { public static void main(String[] args) { try { try { thro ...

  8. JAVA课程课后作业03之动手动脑

    一.构造函数 问题一: 错误代码如图: 错误原因:从图片中的编译报错的地方来看,程序是在给新的对象分配空间是出现了问题,因而我们往下观察Foo类,Foo类的构造方法是有一个参数的有参方法,而前面构造新 ...

  9. JAVA课程课后作业之使用递归完成回文

    一.思路 1.我的想法是利用数组的做法来进行,先是用scanner录入一个String类 2.然后就是将String转化成char数组 3.递归的就是第一个和最后一个对比,然后第一个加一,最后一个减一 ...

随机推荐

  1. redis提供的持久化机制(rdb,aof)

    Redis提供的持久化机制 Redis是一种面向“key-value”类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却十分迅速. 近日,R ...

  2. spark on yarn container分配极端倾斜

    环境:CDH5.13.3  spark2.3 在提交任务之后,发现executor运行少量几台nodemanager,而其他nodemanager没有executor分配. 测试环境通过spark-s ...

  3. Linux分发版本的试用及选择工具

    https://www.forbes.com/sites/jasonevangelho/2019/06/15/how-to-test-drive-200-linux-distributions-wit ...

  4. Day7 - H - 青蛙的约会 POJ - 1061

    两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特 ...

  5. 0108 spring的申明式事务

    背景 互联网的金融和电商行业,最关注数据库事务. 业务核心 说明 金融行业-金融产品金额 不允许发生错误 电商行业-商品交易金额,商品库存 不允许发生错误 面临的难点: 高并发下保证: 数据一致性,高 ...

  6. Mysql多对多关系的查询

    1.创建user表 2.创建gateway表 3.创建user_gateway表 4.创建device表 5.创建gateway_device表 6.创建一个实体类 public class Devi ...

  7. maven的本地仓库

    今天新建的一个maven项目的依赖出了问题,想删除本地仓库的相关依赖文件夹,再重新加载,结果半天没找到文件夹位置. 我因为是改了maven的setting文件的,所以是直接到设置的文件夹里面找,结果半 ...

  8. EditText监听器------实时监听

    前言: 在Android开发中EditText的使用频率还是挺高的,比如登录界面输入密码验证码等,有的时候要求我们要在输入号码后显示是哪家公司的,比如中国移动,中国联通,这是就会用到EditText监 ...

  9. HDU - 6197 array array array (最长上升子序列&最长下降子序列)

    题意:对于一个序列,要求去掉正好K个数字,若能使其成为不上升子序列或不下降子序列,则“A is a magic array.”,否则"A is not a magic array.\n&qu ...

  10. shell中取字符串子串的几种方式 截取substr

    shell中取字符串子串的几种方式 echo "123456789" | awk '{print substr($0,5,2)}' 截取 1)awk中函数substrsubstr( ...