好吧,我有一个代码可以工作。但它需要很长时间(大约7个月的时间,每天有30,000次差异),因为它必须循环很多次。还有其他更好的建议吗?
我的意思是这个代码的东西看似简单,需时约24-28小时......
包VarPackage;
import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList;
公共类的ReadText {
public static void main(String[] args) throws Exception {
String inputFileName="C:\\MFile";
ArrayList<String> fileLines = new ArrayList<String>();
FileReader fr;
BufferedReader br;
// Time
int t = 1;
fr = new FileReader(inputFileName);
br = new BufferedReader(fr);
String line;
while ((line=br.readLine())!=null) {
fileLines.add(line);
}
AvgVar myVar = new AvgVar(fileLines);
for(t=1; t<10; t++){
System.out.print("Average Var at Time t=" + t + " = " + myVar.avgVar(t)+"\n");
}
}}
======================= ============
NewClass
package VarPackage;
import java.util。数组列表;
公共类AvgVar {0}类变量 private ArrayList inputData = new ArrayList();
//构造函数 AvgVar(ArrayList fileData){input:inputData = fileData; }
public double avgVar(int time){
double avgVar = 0;
ArrayList<double[]> avgData = avgDuplicateVars(inputData);
for(double[] arrVar : avgData){
avgVar += arrVar[time-1];
//System.out.print(arrVar[time-1] + "," + arrVar[time] + "," + arrVar[time+1] + "\n");
//System.out.print(avgVar + "\n");
}
avgVar /= numDays(inputData);
return avgVar;
}
private int numDays(ArrayList<String> varData){
int n = 0;
int flag = 0;
为(字符串行:VARDATA){
String[] myData = line.split(" ");
if(myData[0].equals("DATE") && flag == 0){
flag = 1;
}
else if(myData[0].equals("DATE") && flag == 1){
n = n + 1;
flag = 0;
}
}
回报N;
}
private ArrayList<double[]> avgDuplicateVars(ArrayList<String> varData){
ArrayList<double[]> avgData = new ArrayList<double[]>();
double[] varValue = new double[86400];
double[] varCount = new double[86400];
int n = 0;
int flag = 0;
为(字符串ILINE:VARDATA){
String[] nLine = iLine.split(" ");
if(nLine[0].equals("DATE") && flag == 0){
for (int i=0; i<86400; i++){
varCount[i] = 0;
varValue[i] = 0;
}
flag = 1;
}
else if(nLine[0].equals("DATE") && flag == 1){
for (int i=0; i<86400; i++){
if (varCount[i] != 0){
varValue[i] /= varCount[i];
}
}
varValue = fillBlankSpreads(varValue, 86400);
avgData.add(varValue.clone());
flag = 0;
}
else{
n = Integer.parseInt(nLine[0])-1;
varValue[n] += Double.parseDouble(nLine[2]);
varCount[n] += 1;
}
}
返回avgData;
}
private double[] fillBlankSpreads(double[] varValue, int numSpread){
//Filling the Data with zeros to make the code faster
for (int i=1; i<numSpread; i++){
if(varValue[i] == 0){
varValue[i] = varValue[i-1];
}
}
return varValue;
}
}
我觉得你没有得到答案,因为你的问题描述很难理解。请尽量让我们这些对凡人更清楚些! – 2010-07-13 14:02:19
另外,你期待什么样的输出?你想写出一个包含每个可能时间变化的文件吗?或者您是否会查询特定时间,并想在当时查找或计算答案? – 2010-07-13 14:07:07
7号,你的第一次是2.那么你的变化在时间1应该是什么样子? – 2010-07-13 14:09:19