Java 从数组中拆分字符串的双精度值创建集合

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,并使用了日期,因为没有重复项,但在年,我无法找到问题的解决方案:在英国的任何地方,气温下降到

我在当前的一个练习中遇到了一些问题,我必须查找1000个字符串的数组,这些字符串按“,”拆分为siteId、siteName、year、month、day、hour和temperature。我需要的信息是一个整数,即记录的日期,以及一个双精度的温度

比如说,

我从一个气象站得到一个记录 格拉卡诺湖锯木厂(3031),2015,01,01,18,7.50

到目前为止,我已经尝试制作了一个arrayList,并使用了日期,因为没有重复项,但在年,我无法找到问题的解决方案:在英国的任何地方,气温下降到0.0或以下的天数是多少

年份变量并不重要,因为记录仅来自2015年

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.");    
    }