我对当前的一个练习有一些问题,在这个练习中,我必须查找一个由1000个字符串组成的数组,这些字符串按“,”拆分为siteid、sitename、year、month、day、hour和temperature。我需要的信息是一个整数,也就是记录的日期,还有一个双倍的温度。
例如,
我从一个气象站得到一个值为3031的记录,loch glacarnoch saws(3031),2015,01,01,18,7.50
到目前为止,我已经试着做了一个数组列表和日期,因为不可能有重复的,但在中找不到问题的解决办法:多少天的温度下降到0.0或以下的任何地方在英国?
年份变量并不重要,因为记录仅来自2015年。 String[] weatherData = WeatherData.getData();
```
double zeroTemp = 0.0;
int counter = 0;
// get the data
for (int i = 1; i <= weatherData.length-1; i++) {
String line = weatherData[i];
String[] data = line.split(",");
int date = Integer.parseInt(data[6]);
int month = Integer.parseInt(data[5]);
int year = Integer.parseInt(data[4]);
double temp = Double.parseDouble(data[9]);
LocalDate when = LocalDate.of(year, month, date);
for(int j = 1; j<= data.length; j++) {
HashSet<LocalDate> duplicateDates = new HashSet<>(Arrays.asList(when));
System.out.println(when);
duplicateDates.add(when);
System.out.println(duplicateDates.size());
}
if(zeroTemp >= temp) {
counter++;
}
}
System.out.println("The temperature fell to 0.0 degrees or below in " + counter + " days.");
}
3条答案
按热度按时间yzxexxkh1#
我需要的信息是一个整数,也就是记录的日期
不是真的。
输入可能包含单个日期的多个条目,在这种情况下,您需要知道整个日期(即使年不相关,也有月+日;你不能只看“日”值,否则你会认为3月1日和4月1日是同一天,这显然是不正确的。
或者,没有重复:对于任何给定的确切日期,只能有一条记录。这听起来是错误的(考虑到“或以下任何地方在英国?”部分),但如果是这样,你不需要看一天或一个月;只需计算温度记录低于0的条目数。
你可以破解它,把月和日字段变成一个唯一的整数(将月乘以32,然后加上天:这保证你有一个唯一的'month+day'id值,因为没有一个月有32天,重叠是不可能的)。或者正确地写下它,并将“年+月+日”字段转换为
LocalDate
示例:LocalDate when = LocalDate.of(2015, 1, 1)
将生成表示2015年1月1日的localdate示例。arraylist不是唯一性的好工具;你可能在找
HashMap
它将一个给定的“键”Map到一个给定的值,或者更好的是,Map到一个HashSet
,它存储值,但不会多次存储相同的值。然后,您可以添加任何localdate,其中您发现一条记录在零下,如果您随后找到另一条这样的记录,您不会更改任何内容—只需再次将日期添加到集合中,因为它不会产生任何效果。然后在最后检查一下这个集合有多大。所以:创建localdate的哈希集。
对于每个记录:编写代码,将年、月和日值转换为localdate,使用
LocalDate.of(year, month, day)
.检查温度值是否低于0.0。如果是这样的话,把你做的日期加进去。
当完成循环时,集合的大小表示英国任何地方温度低于0的天数。
注意:
line.split(",")
将获取一行文本并通过在每个逗号处拆分输入行来返回字符串数组。Integer.parseInt("50")
返回数字50。这应该是你完成作业所需要的全部信息。
o75abkj42#
终于!非常感谢你们的帮助,伙计们。
我终于做到了。
我只需要在for循环外放置一个hashset,只有在温度低于或等于0.0时才输入一个新值
我不知道我怎么看不见。
elcex8rz3#
你提到日期是独一无二的。根据情况,您可以通过以下简单步骤完成:
把记录放进
Map<LocalDate, Double>
存储日期作为键,存储温度作为值。迭代
Map
值并计算发现温度小于零的次数。演示: