gpt4 book ai didi

Java 平均值,跳跃

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:33 31 4
gpt4 key购买 nike

我是一个十足的 Java 新手。上周一开始,之前从未用任何语言进行过任何编程。因此,如果我发现简单的事情变得复杂,请耐心等待。

我收到了一个文本文件。如下图:

第一个数据是时间(午夜过后的秒数),第二个是分数(无关),第三个是跳跃(不需要知道这意味着什么......)

我可以很高兴地使用此代码阅读此内容:

import java.io.FileReader;
import java.io.BufferedReader;
import java.util.ArrayList;



public class ReadText {

public static void main(String[] args) throws Exception {

String InputFile="C:\\PracticeSpreads.txt";
ArrayList<String> fileLines=new ArrayList<String>();
FileReader fr;
BufferedReader br;
fr = new FileReader(InputFile);
br = new BufferedReader(fr);
String line;
br.readLine();

while ((line=br.readLine()) != null) {

fileLines.add(line);

//System.out.print(line+"\n");



}

}
}

我跳过了第一行,因为这样更容易。

好吧,基本上我需要做的是创建每日时间加权平均跳跃。

我可以获得平均跳跃,但无法获得时间加权平均跳跃。

时间加权平均跳跃的公式为=

对于一秒有不止一次跳跃的情况,我想采用该时间段的“平均跳跃”。

但我真的不知道,因为我不太确定循环将如何安排自己。

希望有人能帮助我!

最佳答案

阅读下面的评论并更好地理解您的要求后,这里有一段代码可以完成这项工作。请注意,它假设每天的时间戳都已排序,如您的示例所示:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.AbstractMap.SimpleEntry;

public class ReadText {
public static void main(String[] args) throws IOException {
BufferedReader br = null;
try {
String InputFile = "C:\\PracticeSpreads.txt";
br = new BufferedReader(new FileReader(InputFile));
String line;
List<SimpleEntry<Integer, List<Double>>> valuesInDay = new ArrayList<SimpleEntry<Integer, List<Double>>>();
String date = null;
while ((line = br.readLine()) != null) {
line = line.trim();
if (line.startsWith("DATE")) {
if (line.equals(date)) // Found day footer
System.out.println("Average for " + date + ": " + calcDayAvg(valuesInDay));
else { // Found a day header
valuesInDay.clear();
date = line;
}
} else { // Found a value entry
Scanner s = new Scanner(line);
int sec = s.nextInt();
s.nextDouble();
double jump = s.nextDouble();

List<Double> jumps;
if (!valuesInDay.isEmpty() && valuesInDay.get(valuesInDay.size() - 1).getKey() == sec) {
// Same time stamp as prev
jumps = valuesInDay.get(valuesInDay.size() - 1).getValue();
}else {
// New time stamp
jumps = new ArrayList<Double>();
valuesInDay.add(new SimpleEntry<Integer, List<Double>>(sec, jumps));
}
jumps.add(jump);
}
}
} finally {
if (br != null)
br.close();
}
}

private static Double calcDayAvg(List<SimpleEntry<Integer, List<Double>>> values) {
if (values.isEmpty())
return null; // No way to calculate for empty set
double min = values.get(0).getKey();
double max = values.get(values.size() - 1).getKey();
double span = max - min;
if (span == 0)
return null; // Division by zero...

double total = 0;
for (int i=0; i < values.size(); i++) {
SimpleEntry<Integer, List<Double>> entry = values.get(i);
int sec = entry.getKey();
double jumpAvg = getJumpAvg(entry.getValue());
int jumpDuration;
if (i == values.size() - 1)
jumpDuration = 1; // last jump has duration of 1 sec
else
jumpDuration = values.get(i + 1).getKey() - sec;

total += jumpAvg * jumpDuration;
}
return total / span;
}

private static double getJumpAvg(List<Double> jumps) {
double total = 0;
for (Double jump : jumps) {
total += jump;
}
return total / jumps.size();
}
}

关于Java 平均值,跳跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3227413/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com