在任意数量的类别上均匀分配项目

时间:2015-06-02 12:10:54

标签: java main

我想写一个将数据分配到“年龄”类别的主要方法。 每个数据项都有年龄。年龄类别为5年,0-5岁,5-10岁,10-15岁等。 我只想显示包含项目的类别。

所以如果输入是:

理查德,15岁

海伦,24岁 史蒂文,16岁

埃德,19

弗雷德里克,12岁

输出类似于:

计算类别:

0-5,5-10,10-15,15-20,20-25

分布:

10-15:弗雷德里克

15-20:Richard,Steven,Edwin

20-25:海伦

1 个答案:

答案 0 :(得分:0)

public static void main(String[] args) throws IOException {
    Map<Integer, List<String>> result = new HashMap<Integer, List<String>>();
    while (true) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = br.readLine();
        if (!line.contains(",")) {
            System.out.println("incorrect input string");
            continue;
        }

        String name = line.split(",")[0];
        String age = line.split(",")[1];
        age = age.trim();
        int ageInt = -1;
        try {
            ageInt = Integer.parseInt(age);
        } catch (NumberFormatException e) {
            System.out.println("age not a number");
            continue;
        }

        ageInt = ageInt - ageInt % 5;
        List<String> names = result.get(ageInt);
        if (names ==  null) {
            names = new ArrayList<String>();
        }
        names.add(name);
        result.put(ageInt, names);

        printResult(result);
    }
}

private static void printResult(Map<Integer, List<String>> result) {
    List<Integer> ages = new ArrayList<Integer>();
    ages.addAll(result.keySet());
    Collections.sort(ages);

    for (Integer integer : ages) {
        List<String> name2 = result.get(integer);
        System.out.println(integer + " - " + (integer + 5) + " : ");
        for (String s : name2) {
            System.out.println("     " + s);
        }
    }
}