java - 从数组中拆分字符串的双精度值创建集合
问题描述
我在当前的练习中遇到了一些问题,我必须查看由“,”分割成 siteId、siteName、年、月、日、小时和温度的 1000 个字符串的数组。我需要的信息是一个整数,即记录的日期,以及一个双精度数,即温度。
例如,
我从气象站获得了记录,其值为 3031,LOCH GLACARNOCH SAWS (3031),2015,01,01,18,7.50
到目前为止,我已经尝试制作一个 arrayList 等日期,因为不能有重复,但 In 找不到问题的解决方案:英国任何地方的温度下降到 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.");
}
解决方案
我需要的信息是一个整数,就是记录的日期
并不真地。
输入可能包含单个日期的多个条目,在这种情况下,您需要知道整个日期(即使年份无关紧要,也有月 + 日;您不能只查看“日”值,或者您d 将 3 月 1 日和 4 月 1 日视为同一天,这显然是不正确的。
或者,没有重复:对于任何给定的确切日期,都只能有一条记录。这听起来是错误的(考虑到“或在英国的任何地方?”部分),但如果是这样,您无需查看日期或月份;只需计算温度记录低于 0 的条目数。
您可以破解它并将月份和日期字段转换为单个唯一整数(将月份乘以 32,然后添加天数:这可以保证您拥有唯一的“月+日”ID 值,因为没有一个月有 32 天,重叠是不可能的)。或者正确地编写它并将那个年+月+日字段转换为一个LocalDate
实例:LocalDate when = LocalDate.of(2015, 1, 1)
将生成一个表示 2015 年 1 月 1 日的 LocalDate 实例。
ArrayList 不是唯一性的好工具;您可能正在寻找HashMap
将给定“键”映射到给定值的映射,或者更好的是 a HashSet
,它存储值,但不会多次存储相同的值。然后,您可以添加在零以下找到记录的任何 LocalDate ,如果您随后找到另一个这样的记录,您不会更改任何内容 - 只需再次将日期添加到集合中,因为它不会有什么影响。然后在最后只检查集合有多大。所以:
- 创建一个 LocalDate 的 HashSet。
- 对于每条记录:编写将年、月和日值转换为 LocalDate 的代码,使用
LocalDate.of(year, month, day)
. - 检查温度值是否低于 0.0。如果是这样,请将您制作的日期添加到集合中。
- 完成循环后,集合的大小表示英国任何地方温度低于 0 的天数。
注意:line.split(",")
将获取一行文本并通过在每个逗号处拆分输入行来返回一个字符串数组。Integer.parseInt("50")
返回数字 50。
这应该是完成作业所需的所有信息。
推荐阅读
- asp.net-mvc - asp.net mvc 中的服务有问题吗?
- typescript - 破坏深度嵌套的枚举,我是否必须键入每个项目?
- php - 表单不发送电子邮件数据 PHP
- python - 如何使用 cron 在 Raspberry Pi 上自动化 Python 程序?
- javascript - 如何在基于选项卡的导航上设置活动类并获取数据表单数据库
- android - 尝试运行文件时在 android studio 中遇到 ApkProvisionException
- node.js - 如何检查列中的任何值是否为空,它在猫鼬中计数值 1?
- reactjs - React children id 增加 1
- python-3.7 - 这两种创建列表的方法有什么区别
- javascript - 如何使用 jquery 禁用或隐藏轮播下一个/上一个图标