Java课程课后作业190315之从文档中读取随机数并得到最大连续子数组
从我上一篇随笔中,我们可以得到最大连续子数组。
按照要求,我们需要从TXT文档中读取随机数,那在此之前,我们需要在程序中写入随机数
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random; public class Main {
public static void main(String[] args) {
File f = new File("C:/D/shuzu.txt"); if(!f.exists())
try {
f.createNewFile(); } catch (IOException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
try {
PrintWriter pw = new PrintWriter(f);
for(double i=0;i<90000;i++) {
Random r=new Random();
int i1=r.nextInt(1000);//设置的是0-1000的随机数,然后是每3个写入一个负数
if(i%3==0) {
i1=0-i1;
}
pw.print(i1);
pw.print(",");
if(i==80000) {
System.out.println("到这里了");
}
}
pw.close();
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
这段代码的作用是在TXT文件中输入90000个-1000到1000的随机数,并且以英文的逗号作为分割。
接下来我们需要进行的操作就是对这个90000个数值进行读取,我采取的方法是使用方法读取之后进读取到的以逗号作为分隔标志,将其储存到String数组中,然后开始对String数组中的每一个进行辨别,判断数组中的每一个元素时候为正数或者为负数,如果是负数则进行排除在计算之外,如果是的话就开始进行大数据字符串的运算,然后再依据上一篇博客的方法对连续的最大子数组进行判断即可。
估计大家会问到,为什么是输出的是90000个随机数,而不是更大的数值,在第一个程序运行的时候,我发现当我的随机数生成的个数到1000000的时候,程序的运算量就开始变得相当的长,更重要的是在到了这个数量级的时候,即使程序能够显示出已经生成了900000个随机数,但是我的TXT文档却一直无法打开,老师分析的可能是写入的缓存区不够用了导致的,具体的原因我会在之后的时间里找一下问题所在。
更新:最后证明是能够打开的,时间太长了,我的笔记本是i5 8250U,因为是低压U的关系,所以处理器的性能比起标压U的会小很多,所以在处理文件上会慢很多,所以就设置在了90000个地方稍微会快一点。
接下来贴出运行代码:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BigInteger TempNum=new BigInteger("0");
BigInteger Big0=new BigInteger("0");
BigInteger Max=new BigInteger("0");
String subway_1=subway_1("C:/D/shuzu.txt");
System.out.println(subway_1);
for(int i=0;i<number.length;i++) {
boolean flag=Isnumber(number[i]);
if(flag==true) {
System.out.println("输入为数值!");
BigInteger BigNum=new BigInteger(number[i]);
TempNum=TempNum.add(BigNum);
int is=TempNum.compareTo(Big0);
if(is==-1) {
TempNum=new BigInteger("0");
}else {
int is2=TempNum.compareTo(Max);
if(is2!=-1) {
Max=TempNum;
}
}
System.out.println("读取的"+(i+1)+"个数值:"+BigNum);
System.out.println("最大值:"+Max);
}
else
System.out.println("输入不为数值!");
}
}
private static String[]number; private static String subway_1(String file) throws IOException {
// TODO Auto-generated method stub File f=new File(file);
BufferedReader bf=new BufferedReader(new FileReader(f));
String content="";
content=bf.readLine();
String[] temp = content.split(",");
number=temp;
return null;
}
private static boolean Isnumber(String num) { Pattern pattern = Pattern.compile("-?[0-9]+(.[0-9]+)?");
Matcher isNum = pattern.matcher(num);
if( !isNum.matches() ){
return false;
}
return true;
} }
其实在这个问题中,分为几个模块就可以解决,1.写入数据,2.读取数据并进行拆分,同时检验数据时候符合规范,3.利用大数据字符串的方法来求较多数据情况下的连续字符串的运算。
Java课程课后作业190315之从文档中读取随机数并得到最大连续子数组的更多相关文章
- Java课程课后作业190315之最大连续子数组(二维数组版)
,, 在本周的课堂上,老师再一次提高了要求,将一维数组升级成为了二维数组,然后求出块状的连续子数组. 一开始还想着借鉴之前球一维数组的O(n)的算法,后来还是没有找到头绪,舍友讲了自己的办法,但是没有 ...
- 从多个XML文档中读取数据用于显示webapi帮助文档
前言: 你先得知道HelpPageConfig文件,不知道说明你现在不需要这个,所以下文就不用看了,等知道了再看也不急.当然如果你很知道这个,下文也不用看了,因为你会了. 方法一: new XmlDo ...
- 输出5个大写英文字母的组合,并写入到txt文档中,随机数法。
1.问题起源:最近想申请几个英文商标,研究了一下,英文字母在4到7个之间最好,5个字母尤佳,所以先来输出5个字母的组合,可是想像力有限,于是想用排列组合把所有5个可能的字母组合都输出,再从中挑选几个感 ...
- java课程课后作业190616之个人学期总结
在团队开始的那一周,我们做了作品的功能畅想,在讲台上谈论了自己的产品可能会有的功能,比如说课程查找功能,空教室查找功能,霸屏功能,课程留言功能等,当然,随着开发的推进,我也发现了有些功能上实现的困难, ...
- JAVA课程课后作业之使用递归完成回文
一.思路 1.我的想法是利用数组的做法来进行,先是用scanner录入一个String类 2.然后就是将String转化成char数组 3.递归的就是第一个和最后一个对比,然后第一个加一,最后一个减一 ...
- JAVA课程课后作业03之作业一
作业:使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”. 代码: package TestJava; import java ...
- java课程课后作业190425之一维数组最大子数组(界面实现)
题目要求: 1.在第一个问题过程中,我在以前的代码中好像已经写出了这个功能,想要实现这个功能,我们只需要在我们储存的数组和是负数的时候对中转值进行重新赋值就可以得到新的数值的起始位置,而他的终了位置就 ...
- java课程课后作业05之动手动脑
一.使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件 此代码没有使用walkfiletree,两者的差别在于walkfiletree在遍历文件的时候有一 ...
- java课程课后作业04之动手动脑
一.多层的异常捕获-1 先贴出代码: public class CatchWho { public static void main(String[] args) { try { try { thro ...
随机推荐
- 第三节:SignalR之PersistentConnection模型详解(步骤、用法、分组、跨域、第三方调用)
一. 承上声明 在上一个章节里,啰里啰嗦写了一堆关于介绍SignalR的“废话”,从这一篇开始往后正式撸代码,这期间不少人(包括 张善友大哥)建议我直接用.Net Core下的SignalR,关于此简 ...
- 2.12 for循环
for循环 像while循环一样,for可以完成循环的功能. 在Python中 for循环可以遍历任何序列的项目,如一个列表或者一个字符串等. for循环的格式 for 临时变量 in 列表或者字符串 ...
- java处理含有中文的字符串.
1. 问题描述: 原始数据是以行为单位的, 每行固定长度931个字节, 汉字占2个字节, 按照字典描述,共有96个字典,只有第32个字典为中文地址, 所以需要单独处理. 由于项目设计保密,故删除敏感数 ...
- 爬虫时遇到的' 编码错误gbk ' 的解决方案
# 每次请求一次,然后写文件,这样可以规避多次请求触发反爬虫 r = requests.get('https://www.pearvideo.com/video_1522192') html = r. ...
- java web添加mysql过程中遇到的错误及解决办法
问题一:遇到提示找不到驱动 com.mysql.jdbc.Driver 起初项目中是导入了mysql-connector-java-5.1.45-bin.jar 包的,但是一直依然报错,最后去官网 ...
- Visual Studio Code(VSCODE)语言设置
Visual Studio Code(VSCODE)语言设置 语言设置 1.快捷键 Windows.Linux 快捷键是:ctrl+shift+p macOS 快捷键是:command + shift ...
- 【原创】大叔经验分享(10)Could not transfer artifact org.apache.maven:maven. from/to central. Received fatal alert: protocol_version
maven编译工程报错 [ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:add-source (s ...
- Python 回溯算法
回溯算法(试探法) 在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回,尝试别的路径.回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标.但当探索到某一步时 ...
- npm安装less和less-loadernpm或者stylus和stylus-loader
vue-cli 构建的项目默认是不支持 less 的,需要自己添加. 首选,安装 less 和 less-loader ,在项目目录下运行如下命令 npm install less less-load ...
- 使用Java API操作HDFS文件系统
使用Junit封装HFDS import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org ...