Java 在CSV文件中有多个记录时打印特定数据和计算 标题
上面的程序正确读取文件,读取并打印所有记录,但对于我的平均日期,它是计算每个记录的日期,而不是计算所有的日期。我是一个新手,对Java非常陌生,我看不出我做错了什么。另一个问题是,我不知道如何计算每列的最小/最大数据。直截了当地说,我不知道怎么做 要计算平均值,您必须首先计算总数并将其除以元素数。因此,每次读取数据时,初始化Java 在CSV文件中有多个记录时打印特定数据和计算 标题,java,file,csv,Java,File,Csv,上面的程序正确读取文件,读取并打印所有记录,但对于我的平均日期,它是计算每个记录的日期,而不是计算所有的日期。我是一个新手,对Java非常陌生,我看不出我做错了什么。另一个问题是,我不知道如何计算每列的最小/最大数据。直截了当地说,我不知道怎么做 要计算平均值,您必须首先计算总数并将其除以元素数。因此,每次读取数据时,初始化total,并在while循环中求和 import java.io.BufferedReader; import java.io.FileNotFoundExceptio
total
,并在while循环中求和
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class CSVReader {
public static void main(String[] args) {
CSVReader obj = new CSVReader();
obj.run();
}
public void run() {
String CSVFile = "/Users/Wyatt/CSVFile2.csv";
BufferedReader br = null;
String Line = "";
String analysisStr;
String CSVDelimiter = ",";
int analysis;
double AVGDate = 0;
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
try {
br = new BufferedReader(new FileReader(CSVFile));
while ((Line = br.readLine()) != null) {
String[] Weather = Line.split(CSVDelimiter);
System.out.println("Weather [Date: "
+ Double.parseDouble(Weather[0]) + ", Interval: "
+ Double.parseDouble(Weather[1]) + ", Rainfall: "
+ Double.parseDouble(Weather[2]) + ", Sunlight: "
+ Double.parseDouble(Weather[3]) + ", Time: "
+ Double.parseDouble(Weather[4]) + ", Total: "
+ Double.parseDouble(Weather[5]) + ", Overall: "
+ Double.parseDouble(Weather[6]) + "]");
AVGDate = (Double.parseDouble(Weather[0]) / 804);
System.out.println(AVGDate);
}
System.out.println("What data is wanted?");
analysisStr = console.readLine();
analysis = Integer.parseInt(analysisStr);
if(analysis == 0) {
System.out.println("Date.");
System.out.println("Minimum date is:");
System.out.println("Maximum date is:");
System.out.println("Average date is: " + AVGDate);
}
else if(analysis == 1) {
System.out.println("Interval.");
System.out.println("This data isn't useful.");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println("Done.");
}
}
现在关于计算最小值或最大值
double total = 0.0
while(...) {
...
total += Double.parseDouble(Weather[0]);
}
AVGDate = total / 804;
double minDate=double.MAX_值;
double maxDate=double.MIN_值;
而(…){
//解析每个数据
双温=天气[0];
如果(温度最大日期){
maxDate=温度;
}
}
还请记住,我们对非最终变量命名使用约定。平均日期是多少?为什么要除以804?为什么不将
AVGDate
的所有计算值相加,然后除以记录数?使用a表示干净的代码。我用它得到的输出不正确,如果我这样做,系统似乎只读取第一条记录?这是我的代码:,输出是最小日期是:1.7976931348623157E308最大日期是:4.9E-324平均日期是:1943。5796019900497@user3135026当我编写while(…){}
时,这并不意味着必须引入一个新的while
循环。我的意思是将代码包含到已经存在的while
循环中,平均值不起作用,它是将每个日期分别除以804,而不是将它们相加?再次感谢您在之前初始化total
而循环并保持total+=Double.parseDouble(天气[0])代码>在中,而循环。在while
循环后进行平均。
double minDate = Double.MAX_VALUE;
double maxDate = Double.MIN_VALUE;
while(...) {
// parse each data
double temp = Weather[0];
if(temp < minDate) {
minDate = temp;
}
else if(temp > maxDate) {
maxDate = temp;
}
}