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