计算java中每分钟的出现次数

时间:2018-01-03 19:19:00

标签: java input time file-io while-loop

我正在尝试获取每分钟数据的出现次数。日期看起来像这样。第一个数字是一个整数,表示自从我将其转换为ISO 8601时间的Unix纪元以来的秒数。第二个是双倍。结束于" 00"表示第0分钟,结束于" 60"代表第1分钟。

962668800 60.5
962668801 61.5
962668860 71.5

代码:

 public static void main(String args[] ) throws Exception {
            Scanner s = new Scanner(System.in);
            int count = 0;
            System.out.print("New minute found: ");

            while (s.hasNextLine()){
                int request = s.nextInt();
                double response = s.nextDouble();

                DateTimeFormatter d = secToDate(request); 
                int i = ldt.getSecond();

                if (i == 0){
                    System.out.print(count + " " + ldt.format(d) + "\n");
                    System.out.print("New Minute found: ");
                }else{
                    count++;
                }


            }
        } 

我的输出是:

New minute found: 0 2000-07-04T00:00:00Z
New Minute found: 1 2000-07-04T00:01:00Z
New Minute found: 

但我正在寻找类似下面的内容(忽略新发现的文字)

2000-07-04T00:00:00Z 2
2000-07-04T00:01:00Z 1

如何调整它以便跟踪当前分钟并添加到计数器而不会过早打印出计数器?

1 个答案:

答案 0 :(得分:1)

  

我如何调整它以便跟踪当前分钟并添加到计数器而不会过早打印出计数器?

你不要调整它。你从更好的设计开始。你的方法只有13行,已经做得太多了。你的问题是你已经将计算和显示混为一谈

因为当你这样做会受到伤害,所以停止这样做。你只有13行;现在是重新开始的好时机。

编写一个具有此签名的方法:

private static Dictionary<String, Integer> getMinuteCounts() { ... }

该方法只有一件事,只有一件事。它计算一个字典,它将表示分钟的字符串映射到观察到的分钟数。它绝对没有别的

现在编写一个具有此签名的方法:

private static void displayMinuteCounts(Dictionary<String, Integer> d) { ... }

那件事只做一件事而且只做一件事:它显示计算的数量。

现在你的主要方法体是:

displayMinuteCounts(getMinuteCounts());

简而言之:通过将程序分解为方法来解决您的问题,每个方法都做得很好,并且不会尝试做任何其他事情。