老师要我写一个运算程序,要求将一个文件中的数据读到内存,进行某种计算,然后再写入另一文件
源码: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();
} }
}现在老师问我,数据运算的算法是什么?
我不懂什么算法,谁能告诉我上面的算法是怎么回事呢?谢谢

解决方案 »

  1.   

    for(int j=0;j<50000;j++){
         d[i]=Math.sqrt(Math.pow(Math.abs(((d[i]+10)*10-10)/10.0),2));//计算公式
     }干什么的?谁写的程序啊?不是你自己写的?
    这个for里面干嘛重复计算d[i],i值又没变…
      

  2.   

    架构师交流群:43545919,已经上传google 、 eBay、Youtube等顶级软件产品的架构分析!资料陆续上传中。
    达到人数后开始培训!欢迎加入探讨!
    =============================================
    3月26日《企业应用架构模式》pdf 系列书籍已经上传至群共享,欢迎下载!也欢迎大家踊跃到群里提问题,回答问题。回答问题多者可以得到群主的奖励阿!
      

  3.   

    按老师要求做的,要求把文件文件里的数据计算50000次,
    for(int j=0;j<50000;j++){
    d[i]=Math.sqrt(Math.pow(Math.abs(((d[i]+10)*10-10)/10.0),2));//计算公式
    }
    这个是算法吗?我不懂算法,程序也是乱乱的,呵呵。^_^
      

  4.   

    File file =new File("D:\\长庆1号井.TXT");
    InputStreamReader=new InputStreamReader(FileReaderStream(file),"gbk"));用来读文件
    算法=计算方法
      

  5.   

    老师问我数据计算算法是什么?我怎么答?
    是这个吗
    for(int j=0;j <50000;j++){ 
    d[i]=Math.sqrt(Math.pow(Math.abs(((d[i]+10)*10-10)/10.0),2));//计算公式 

      

  6.   

    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]每一次都参与计算码