老师要我写一个运算程序,要求将一个文件中的数据读到内存,进行某种计算,然后再写入另一文件
源码:import java.util.*;
import java.io.*;
//import java.lang.*;public class FileOperation {
public static void main(String[] args) {
try {
/*
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br= new BufferedReader(isr);
System.out.print("输入完整文件路径:");
String path_file = br.readLine();
*/
String path_file="D:\\长庆1号井.TXT";
File read = new File(path_file); //根据路径构造一个File对象
String path=read.getPath();//文件路径
String path2=path.substring(0, path.lastIndexOf("\\")+1);
String fileNameRead_txt=path.substring(path.lastIndexOf("\\") + 1);
String fileNameRead=fileNameRead_txt.substring(0,fileNameRead_txt.lastIndexOf("."));//原文件名
String fileNameWrite=fileNameRead+"Temp.txt";//新建文件名称
String pathWrite=path2+fileNameWrite;//新建文件的路径 File write=new File(pathWrite);//新建文件
if(!write.exists()){//创建一个临时文件
write.createNewFile();
}else if(write.exists()){
write.delete();
write.createNewFile();
}
if (!read.isFile()) { //判断File对象是不是一个文件,如果不是就抛出异常
throw new IOException("这不是一个文件!");
}
//读取数据至内存
BufferedReader in = new BufferedReader(new FileReader(read));//构建一个BufferedReader对象,利用BufferedReader对象的readLine()方法读取一行数据
BufferedWriter bw = new BufferedWriter(new FileWriter(write));//写
String lineOfRead = null;//文件中的一行数据
//String[] columnName = null;//表格的列属性名
if ((lineOfRead = in.readLine()) != null && !lineOfRead.trim().isEmpty()) { //读取一行数据并判断是否为空
bw.write(lineOfRead+"\r\n");
}
/*
System.out.print("你要进行的计算是:+,-,*,/:");
InputStreamReader isr_flag = new InputStreamReader(System.in);
BufferedReader br_flag= new BufferedReader(isr_flag);
String str_flag = br_flag.readLine();
System.out.print("请输入计算的值:");
InputStreamReader isr_value = new InputStreamReader(System.in);
BufferedReader br_value= new BufferedReader(isr_value);
String str_value = br_value.readLine();
int value=Integer.parseInt(str_value); System.out.print("请输入计算次数:");
InputStreamReader isr_num = new InputStreamReader(System.in);
BufferedReader br_num= new BufferedReader(isr_num);
String str_num = br_num.readLine();
int num=Integer.parseInt(str_num);
*/
long time1=System.currentTimeMillis();//读取文件前的时间
System.out.println("程序运行中......");
while ((lineOfRead = in.readLine()) != null && !lineOfRead.trim().isEmpty()) {
//构造一个StringTokenizer对象,切分出一个一个数据
StringTokenizer stn = new StringTokenizer(lineOfRead);
String[] data = new String[stn.countTokens()];
float[] f=new float[stn.countTokens()];
//float[] f2=new float[stn.countTokens()];
double[] d=new double[stn.countTokens()];
for (int i = 0; i < f.length; i++) {
data[i] = stn.nextToken();
f[i]=Float.parseFloat(data[i]);
//f2[i]=f[i];
//计算
d[i]=f[i];
for(int j=0;j<50000;j++){
d[i]=Math.sqrt(Math.pow(Math.abs(((d[i]+10)*10-10)/10.0),2));//计算公式 }
bw.write(Double.toString(d[i])+"\t");
}
bw.write("\r\n");
}
in.close();
bw.close();
long time2=System.currentTimeMillis();//读取文件完后的时间
long time=time2-time1;
System.out.println("计算时间为:"+time+"毫秒"); } catch (Exception ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
} }
}现在老师问我,数据运算的算法是什么?
我不懂什么算法,谁能告诉我上面的算法是怎么回事呢?谢谢
源码:import java.util.*;
import java.io.*;
//import java.lang.*;public class FileOperation {
public static void main(String[] args) {
try {
/*
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br= new BufferedReader(isr);
System.out.print("输入完整文件路径:");
String path_file = br.readLine();
*/
String path_file="D:\\长庆1号井.TXT";
File read = new File(path_file); //根据路径构造一个File对象
String path=read.getPath();//文件路径
String path2=path.substring(0, path.lastIndexOf("\\")+1);
String fileNameRead_txt=path.substring(path.lastIndexOf("\\") + 1);
String fileNameRead=fileNameRead_txt.substring(0,fileNameRead_txt.lastIndexOf("."));//原文件名
String fileNameWrite=fileNameRead+"Temp.txt";//新建文件名称
String pathWrite=path2+fileNameWrite;//新建文件的路径 File write=new File(pathWrite);//新建文件
if(!write.exists()){//创建一个临时文件
write.createNewFile();
}else if(write.exists()){
write.delete();
write.createNewFile();
}
if (!read.isFile()) { //判断File对象是不是一个文件,如果不是就抛出异常
throw new IOException("这不是一个文件!");
}
//读取数据至内存
BufferedReader in = new BufferedReader(new FileReader(read));//构建一个BufferedReader对象,利用BufferedReader对象的readLine()方法读取一行数据
BufferedWriter bw = new BufferedWriter(new FileWriter(write));//写
String lineOfRead = null;//文件中的一行数据
//String[] columnName = null;//表格的列属性名
if ((lineOfRead = in.readLine()) != null && !lineOfRead.trim().isEmpty()) { //读取一行数据并判断是否为空
bw.write(lineOfRead+"\r\n");
}
/*
System.out.print("你要进行的计算是:+,-,*,/:");
InputStreamReader isr_flag = new InputStreamReader(System.in);
BufferedReader br_flag= new BufferedReader(isr_flag);
String str_flag = br_flag.readLine();
System.out.print("请输入计算的值:");
InputStreamReader isr_value = new InputStreamReader(System.in);
BufferedReader br_value= new BufferedReader(isr_value);
String str_value = br_value.readLine();
int value=Integer.parseInt(str_value); System.out.print("请输入计算次数:");
InputStreamReader isr_num = new InputStreamReader(System.in);
BufferedReader br_num= new BufferedReader(isr_num);
String str_num = br_num.readLine();
int num=Integer.parseInt(str_num);
*/
long time1=System.currentTimeMillis();//读取文件前的时间
System.out.println("程序运行中......");
while ((lineOfRead = in.readLine()) != null && !lineOfRead.trim().isEmpty()) {
//构造一个StringTokenizer对象,切分出一个一个数据
StringTokenizer stn = new StringTokenizer(lineOfRead);
String[] data = new String[stn.countTokens()];
float[] f=new float[stn.countTokens()];
//float[] f2=new float[stn.countTokens()];
double[] d=new double[stn.countTokens()];
for (int i = 0; i < f.length; i++) {
data[i] = stn.nextToken();
f[i]=Float.parseFloat(data[i]);
//f2[i]=f[i];
//计算
d[i]=f[i];
for(int j=0;j<50000;j++){
d[i]=Math.sqrt(Math.pow(Math.abs(((d[i]+10)*10-10)/10.0),2));//计算公式 }
bw.write(Double.toString(d[i])+"\t");
}
bw.write("\r\n");
}
in.close();
bw.close();
long time2=System.currentTimeMillis();//读取文件完后的时间
long time=time2-time1;
System.out.println("计算时间为:"+time+"毫秒"); } catch (Exception ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
} }
}现在老师问我,数据运算的算法是什么?
我不懂什么算法,谁能告诉我上面的算法是怎么回事呢?谢谢
d[i]=Math.sqrt(Math.pow(Math.abs(((d[i]+10)*10-10)/10.0),2));//计算公式
}干什么的?谁写的程序啊?不是你自己写的?
这个for里面干嘛重复计算d[i],i值又没变…
达到人数后开始培训!欢迎加入探讨!
=============================================
3月26日《企业应用架构模式》pdf 系列书籍已经上传至群共享,欢迎下载!也欢迎大家踊跃到群里提问题,回答问题。回答问题多者可以得到群主的奖励阿!
for(int j=0;j<50000;j++){
d[i]=Math.sqrt(Math.pow(Math.abs(((d[i]+10)*10-10)/10.0),2));//计算公式
}
这个是算法吗?我不懂算法,程序也是乱乱的,呵呵。^_^
InputStreamReader=new InputStreamReader(FileReaderStream(file),"gbk"));用来读文件
算法=计算方法
是这个吗
for(int j=0;j <50000;j++){
d[i]=Math.sqrt(Math.pow(Math.abs(((d[i]+10)*10-10)/10.0),2));//计算公式
}
d[i]=Math.sqrt(Math.pow(Math.abs(((d[i]+10)*10-10)/10.0),2));//计算公式
你这是d[i]每一次都参与计算码