Java 从数组中拆分字符串的双精度值创建集合
我在当前的一个练习中遇到了一些问题,我必须查找1000个字符串的数组,这些字符串按“,”拆分为siteId、siteName、year、month、day、hour和temperature。我需要的信息是一个整数,即记录的日期,以及一个双精度的温度 比如说, 我从一个气象站得到一个记录 格拉卡诺湖锯木厂(3031),2015,01,01,18,7.50 到目前为止,我已经尝试制作了一个arrayList,并使用了日期,因为没有重复项,但在年,我无法找到问题的解决方案:在英国的任何地方,气温下降到0.0或以下的天数是多少 年份变量并不重要,因为记录仅来自2015年Java 从数组中拆分字符串的双精度值创建集合,java,arrays,string,split,duplicates,Java,Arrays,String,Split,Duplicates,我在当前的一个练习中遇到了一些问题,我必须查找1000个字符串的数组,这些字符串按“,”拆分为siteId、siteName、year、month、day、hour和temperature。我需要的信息是一个整数,即记录的日期,以及一个双精度的温度 比如说, 我从一个气象站得到一个记录 格拉卡诺湖锯木厂(3031),2015,01,01,18,7.50 到目前为止,我已经尝试制作了一个arrayList,并使用了日期,因为没有重复项,但在年,我无法找到问题的解决方案:在英国的任何地方,气温下降到
String[]weatherData=weatherData.getData()代码>
double zeroTemp=0.0;
int计数器=0;
//获取数据
对于(int i=1;i
我需要的信息是一个整数,即记录的日期
不是真的
任一个输入可以包含一个日期的多个条目,在这种情况下,你需要知道整个日期(即使一年不相关,有一个月+一天;你不能只看那个‘天’值,或者你会认为三月第一和四月的第一是同一天,这显然是不正确的。”
或者,没有重复:对于任何给定的确切日期,只能有一张记录。这听起来是错误的(考虑到“或低于英国任何地方?”部分),但如果是这样,你不需要查看日期或月份;只需计算温度记录低于0的条目
你可以破解它,将月和日字段转换成一个唯一的整数(将月乘以32,然后加上天:这保证了你有一个唯一的“月+日”ID值,因为没有一个月有32天,不可能重叠)。或者正确编写它,并将该年+月+日字段转换为LocalDate
实例:LocalDate when=LocalDate。of(2015,1,1)
将生成表示2015年1月1日的LocalDate实例
ArrayList不是唯一性的好工具;您可能正在寻找将给定的“键”映射到给定值的HashMap
,或者更好的是,一个HashSet
,它存储值,但不会多次存储相同的值。然后,您可以添加在零下找到记录的任何LocalDate,如果您需要的话找到另一个这样的记录,您不会更改任何内容-只需再次将日期添加到集合中,因为它不会产生任何影响。然后在最后检查集合的大小。因此:
创建LocalDate的哈希集
对于每条记录:使用LocalDate.of(year,month,day)
编写代码,将年、月和日值转换为LocalDate
检查温度值是否低于0.0。如果低于0.0,请在设置中添加日期
当完成循环时,集合的大小表示英国任何地方温度低于0的天数
注意:line.split(“,”)
将获取一行文本,并通过在每个逗号处拆分输入行来返回字符串数组。Integer.parseInt(“50”)
返回数字50
这应该是完成家庭作业所需的所有信息。您提到日期是唯一的。根据条件,您可以通过以下简单步骤完成:
将记录放入地图中
,将日期存储为键,温度存储为值
迭代Map
值,并计算发现温度低于零的次数
演示:
// Put the records in a Map<LocalDate, Double>
Map<LocalDate, Double> map = new HashMap<>();
for (int i = 0; i < weatherData.length; i++) {
String line = weatherData[i];
String[] data = line.split(",");
int day = Integer.parseInt(data[6]);
int month = Integer.parseInt(data[5]);
int year = Integer.parseInt(data[4]);
double temp = Double.parseDouble(data[9]);
LocalDate date = LocalDate.of(year, month, day);
map.put(date, temp);
}
// If you wish, you can print the map to view the datewise-records of temperature
System.out.println(map);
// Iterate the map values and count the number of times the temp < 0
int count = 0;
for (Double value : map.values()) {
if (value < 0) {
count++;
}
}
System.out.println("The temperature fell to 0.0 degrees or below in " + count + " days.");
//将记录放入映射中
Map Map=newhashmap();
对于(int i=0;i
最后!非常感谢你们的帮助,伙计们
我终于做到了
//How many days of the year did the temperature fall to 0.0 or below
//anywhere in the UK? Hint : More than 200 but less than 250
String[] weatherData = WeatherData.getData();
double zeroTemp = 0.0;
HashSet<LocalDate> set = new HashSet<>();
// 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);
if(zeroTemp >= temp) {
set.add(when);
}
}
System.out.println("The temperature fell to 0.0 degrees or below in " + set.size() + " days.");
}
//一年中有多少天气温降到0.0或以下
//在英国的任何地方?提示:超过200但不到250
字符串[]weatherData=weatherData.getData();
双零温度=0.0;
HashSet=newhashset();
//获取数据
对于(inti=1;i=temp){
设置。添加(何时);
}
}
System.out.println(“温度在“+set.size()+”天内降至0.0度或以下”);
}
我只需要在for循环外放置一个HashSet,只有在温度低于或等于0.0时才输入一个新值
我不知道我是怎么看不见的。我编辑了这篇文章,现在第一行有一张图片。将代码作为文本,而不是现在编辑的图像。你能帮我创建一个散列集吗?如果那天的温度为零或更低,你应该只将日期添加到该集中。创建一个对数据建模的类。然后执行List model=new ArrayList();
。然后遍历数据并对(…){model.add执行类似于的操作(新类名(地址、年份、日期等)
从那里,您可以使用流
或循环来查找所需的数据。我会尝试这样做。我确信它是正确的。非常感谢您的帮助!我有点被哈希集卡住了,它会返回重复的值。我将此添加到了co
//How many days of the year did the temperature fall to 0.0 or below
//anywhere in the UK? Hint : More than 200 but less than 250
String[] weatherData = WeatherData.getData();
double zeroTemp = 0.0;
HashSet<LocalDate> set = new HashSet<>();
// 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);
if(zeroTemp >= temp) {
set.add(when);
}
}
System.out.println("The temperature fell to 0.0 degrees or below in " + set.size() + " days.");
}