好吧,我有一個代碼可以工作。但它需要很長時間(大約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