Java 如何在新创建的文件中获取月份总数?
我目前正在从这个角度研究C语言 选项3:下载统计数据 如果用户选择此选项,程序将创建包含以下数据的统计文件:Java 如何在新创建的文件中获取月份总数?,java,arrays,class,sorting,methods,Java,Arrays,Class,Sorting,Methods,我目前正在从这个角度研究C语言 选项3:下载统计数据 如果用户选择此选项,程序将创建包含以下数据的统计文件: a. Power output sorted from lowest to highest b. Day with highest output c. Total by month d. Average power output for all the data 统计文件将与输入文件同名,但附加了_stats.txt。例如,如果输入文件名为data.txt,则stats文件
a. Power output sorted from lowest to highest
b. Day with highest output
c. Total by month
d. Average power output for all the data
统计文件将与输入文件同名,但附加了_stats.txt。例如,如果输入文件名为data.txt,则stats文件将名为data_stats.txt
我的数据文件包含
January 10 2018 236.9
January 11 2018 267.6
January 12 2018 278.1
January 13 2018 246.9
January 14 2018 262.3
January 15 2018 288.6
February 2 2018 199.7
February 3 2018 134.6
February 4 2018 200.8
February 5 2018 198.2
March 9 2018 169.7
March 10 2018 168.3
March 11 2018 179.4
当我运行C时,我的总功率是288.6,如何计算每个月的总和
public static void createStatsFile(ArrayList<Entry> uploadResults) {
///////////////
///////A///////
///////////////
try {
PrintWriter writer = new PrintWriter("data_stat.txt", "UTF-8");
ArrayList<Entry> lowestToHighest = bubbleSort(uploadResults);
for(Entry entry : lowestToHighest) {
writer.print(
"Month: " + entry.getMonth() + " Day: " + entry.getDay() + " Year: " + entry.getYear() + " Power Output: " + entry.getPowerOutput());
writer.print("\n");
entry.print();
}
///////////////
///////B///////
///////////////
Entry tmpEntry = null;
for(Entry entry : uploadResults) {
if(tmpEntry == null) {
tmpEntry = entry;
} else {
if(entry.getPowerOutput() > tmpEntry.getPowerOutput()) {
tmpEntry = entry;
}
}
}
writer.write("Day of Max Power Outage: " + tmpEntry.getMonth() + " " + tmpEntry.getPowerOutput());
///////////////
///////C///////
///////////////
//ArrayList<Entry> totalByMonth = bubbleSort(uploadResults);
Entry tempEntry = null;
for(Entry entry: uploadResults) {
float sum;
sum =entry.getPowerOutput();
}
writer.write("Total power output by month: " + tmpEntry.getMonthList() + " " + tmpEntry.getPowerOutput());
writer.close();
在这里,您可以初始化每个循环中的和
Entry tempEntry = null;
for(Entry entry: uploadResults) {
float sum;
sum =entry.getPowerOutput();
}
移动浮点和代码>在总和之前并添加到总和:
Entry tempEntry = null;
float sum = 0;
for(Entry entry: uploadResults) {
sum += entry.getPowerOutput();
}
在这里,您可以初始化每个循环中的和
Entry tempEntry = null;
for(Entry entry: uploadResults) {
float sum;
sum =entry.getPowerOutput();
}
移动浮点和代码>在总和之前并添加到总和:
Entry tempEntry = null;
float sum = 0;
for(Entry entry: uploadResults) {
sum += entry.getPowerOutput();
}
您可以使用streams获得所需结果的映射
Map<String, Double> collect = uploadResults.stream().collect(
Collectors.groupingBy(Entry::getMonth, Collectors.summingDouble(Entry::getPowerOutput)));
编辑:
对于低于Java8的版本,这应该可以
Map<String, Float> monthMap = new HashMap<>();
for (Entry uploadResult : uploadResults) {
String month = uploadResult.getMonth();
Float powerOutput = uploadResult.getPowerOutput();
if( monthMap.containsKey(month) ){
powerOutput += monthMap.get(month);
}
monthMap.put( month, powerOutput);
}
System.out.println(monthMap);
Map monthMap=newhashmap();
for(条目uploadResult:uploadResults){
String month=uploadResult.getMonth();
Float powerOutput=uploadResult.getPowerOutput();
如果(每月){
功率输出+=月平均值(月);
}
月平均功率(月、功率输出);
}
系统输出打印项次(月地图);
您可以使用streams获得所需结果的映射
Map<String, Double> collect = uploadResults.stream().collect(
Collectors.groupingBy(Entry::getMonth, Collectors.summingDouble(Entry::getPowerOutput)));
编辑:
对于低于Java8的版本,这应该可以
Map<String, Float> monthMap = new HashMap<>();
for (Entry uploadResult : uploadResults) {
String month = uploadResult.getMonth();
Float powerOutput = uploadResult.getPowerOutput();
if( monthMap.containsKey(month) ){
powerOutput += monthMap.get(month);
}
monthMap.put( month, powerOutput);
}
System.out.println(monthMap);
Map monthMap=newhashmap();
for(条目uploadResult:uploadResults){
String month=uploadResult.getMonth();
Float powerOutput=uploadResult.getPowerOutput();
如果(每月){
功率输出+=月平均值(月);
}
月平均功率(月、功率输出);
}
系统输出打印项次(月地图);
什么是Entry
这里?哦,对不起,这是我的课,我应该向大家展示一下tooTip:在将日期存储为文本时使用标准ISO 8601格式:YYYY-MM-DD。什么是Entry
这里?哦,对不起,这是我的课,我应该向大家展示tooTip:在将日期存储为文本时使用标准ISO 8601格式:YYYY-MM-DD。如果我这样做,那么在sum,variable not initializedEdit下会出现错误:您需要float sum=0代码>在循环之前。如果我这样做,那么在sum,variable not initializedEdit下会出现错误:您需要float sum=0代码>在循环之前。好的,我导入了它,但是现在我在map和Collector下得到了错误。我是否需要在java中导入一些东西来使用它们?只有在使用java8+时,这才有效。导入应该是import java.util.*;导入java.util.stream.collector代码>哦,该死,我想我的课程使用的是Java7,你知道如何手动操作吗?我曾考虑在if语句中使用一组for循环,但我想不出来。你可以用这个。这是精心设计的版本。我得到的唯一错误是在第一个贴图下,找不到符号。好的,我导入了它,但现在我在贴图和收集器下得到错误。我是否需要在java中导入一些东西来使用它们?只有在使用java8+时,这才有效。导入应该是import java.util.*;导入java.util.stream.collector代码>哦,该死,我想我的课程使用的是Java7,你知道如何手动操作吗?我曾考虑在if语句中使用一组for循环,但我想不出来。你可以用这个。这是一个精心制作的版本。唯一的错误是在第一张地图下,找不到符号。