gpt4 book ai didi

java - 有没有办法从 ArrayList 中挑选出特定元素?

转载 作者:行者123 更新时间:2023-12-02 11:57:11 25 4
gpt4 key购买 nike

我正在尝试从三个单独的文件读取输入,并且用户指定要读取的文件。每个文件中的每一行都包含有关温度读数的信息:纬度、经度、年份、月份、最高温度、最低温度和平均温度。所以每一行看起来像这样:

39.95 41.1667 2002 04 -9999 -9999 420

每个温度还将除以 10 以获得实际温度(以摄氏度为单位)。如果温度为-9999,则不会读取。此外,每个项目都添加到我拥有的 ArrayList 中:

ArrayList<TempRead> t = new ArrayList();

我还有一个 TempRead 类,如下所示:

public class TempRead {
private double latitude = -100;
private double longitude = -180;
private int year = 0;
private int month = 0;
private double maxTemp = -9999;
private double minTemp = -9999;
private double avgTemp = -9999;

public TempRead(){}

public TempRead(double latitude, double longitude, int year, int month, double maxTemp, double minTemp, double avgTemp){
this.latitude = latitude;
this.longitude = longitude;
this.month = month;
this.year = year;
this.maxTemp = maxTemp;
this.minTemp = minTemp;
this.avgTemp = avgTemp;
}

public double getLatitude(){
return latitude;
}

public double getLongitude(){
return longitude;
}

public int getMonth(){
return month;

}

public int getYear(){
return year;
}

public double getMaxTemp(){
return maxTemp;
}

public double getMinTemp(){
return minTemp;
}

public double avgTemp(){
return avgTemp;
}

@Override
public String toString(){
return latitude + " " + longitude + " " + year + " " + month + " " + maxTemp + " " + minTemp + " " + avgTemp + " ";
}

我现在遇到的问题是我不太确定如何获取 ArrayList 的温度元素。我做过这样的事情:

System.out.println(t.get(0));

它表明每一行实际上都被添加到 ArrayList 中,因为它打印出了文件中的第一行。但我必须计算平均值、最大值和最小值。有没有一种方法可以专门挑选出 ArrayList 的最后三个值,以便我可以进行这些计算?

编辑:这是我的主要内容:

public static void main(String[] args) {
ArrayList<TempRead> t = new ArrayList();
readFile(t);
avgAllTemps(t);
}

public static void readFile(ArrayList<TempRead>t){
try{
String userFileName;
Scanner in = new Scanner(System.in);
System.out.println("Enter name of file: ");
userFileName = in.next();
System.out.println();

Scanner file = new Scanner(new File(userFileName));

while(file.hasNext()){
t.add(new TempRead(file.nextDouble(), file.nextDouble(), file.nextInt(), file.nextInt(), file.nextDouble(), file.nextDouble(), file.nextDouble()));
}
}catch(IOException e){
System.out.println(e);
}
}

public static void avgTemps(ArrayList<TempRead>t){
double totalMinTemp = 0.0;
int count = 0;
for (TempRead entry : t) {
if (entry.getMinTemp() != -9999) {
totalMinTemp += entry.getMinTemp();
count++;
}
double avgMinTemp = totalMinTemp / count;
System.out.println("Avg of min temps in arraylist: " + avgMinTemp);
}
}

最佳答案

查找温度时,不应查找 ArrayList 的最后 3 个元素,而应查找 ArrayList 中每个元素内部的数据

要获取第一个条目的温度:

TempRead entry = t.get(0);
double maxTemp = entry.getMaxTemp();
double minTemp = entry.getMinTemp();
double avgTemp = entry.avgTemp();
//do stuff

如果您需要每个条目,请使用循环:

for(TempRead entry : t)
{
double maxTemp = entry.getMaxTemp();
double minTemp = entry.getMinTemp();
double avgTemp = entry.avgTemp();
//do stuff
}
<小时/>

执行诸如平均所有 minTemp 值之类的任务

double totalMinTemp = 0.0;
int count = 0;
for(TempRead entry : t)
if(entry.getMinTemp() != -9999)
{
avgMinTemp += entry.getMinTemp();
count++;
}
double avgMinTemp = totalMinTemp / count;

或者使用流(感谢@JeroenSteenbeeke)

double avgMinTemp = t.stream().filter(t -> t.getMinTemp() != -9999).collect(Collectors.averaging(TempRead::getMaxTemp‌​));

关于java - 有没有办法从 ArrayList 中挑选出特定元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47514862/

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