0

我正在努力使用 Java 解决这个问题

这是所需的输入和输出:

Input
1,9
1,12
1,7
3,3
2,4
3,2
2,2
output
1 -> 7,9,12
2 -> 2,4
3 -> 2,3

我可以使用Comparableand来实现和打印这样的输出compareTo

1,7,
1,9,
1,12,
2,2,
2,4,
3,2,
3,3

但这不是我想要的答案。有人可以帮助我或给我任何建议吗?这是我实现的代码,但这不是我想要的。

4

3 回答 3

0

使用地图:

Map<Integer, List<Integer>> groups = new TreeMap<Integer, List<Integer>>();

对于每个输入行,将其拆分为逗号并分隔数字:

String[] parts = inputLine.split(',');
int group = Integer.parseInt(parts[0]);
int member = Integer.parseInt(parts[1]);

其中“组”是逗号之前的数字,“成员”是逗号之后的数字。查找组的 Map 条目,如果不存在则创建:

List<Integer> list = groups.get(group);
if (list==null) {
  list = new ArrayList<Integer>();
  groups.put(group, list);
}

将“成员”号添加到组中:

group.add(member);

输出留作练习:)

于 2013-03-07T14:49:22.353 回答
0

假设你的字符串是String[]这样的:

public static void main(String[] args) {
    final Scanner sc = new Scanner(System.in);
    final List<String> list = new ArrayList<String>();
    while (sc.hasNext()) {
        final String next = sc.next();
        if ("print".equals(next)) {
            break;
        }
        list.add(next);
    }
    printGrouped(list);
}

public static void printGrouped(Collection<String> args) {
    final TreeMap<Integer, Set<Integer>> map = new TreeMap<Integer, Set<Integer>>() {
        @Override
        public Set<Integer> get(Object key) {
            Set<Integer> list = super.get(key);
            if (list == null) {
                list = new TreeSet<Integer>();
                put((Integer) key, list);
            }
            return list;
        }
    };
    for (final String string : args) {
        final String[] split = string.split(",");
        final Set<Integer> list = map.get(Integer.parseInt(split[0]));
        list.add(Integer.parseInt(split[1]));
    }
    for (final Entry<Integer, Set<Integer>> entry : map.entrySet()) {
        final String valueString = entry.getValue().toString();
        System.out.println(entry.getKey() + " -> " + valueString.substring(1, valueString.length() - 1));
    }
}

输入:

1,9
1,12
1,7
3,3
2,4
3,2
2,2
print

输出:

1 -> 7, 9, 12
2 -> 2, 4
3 -> 2, 3
于 2013-03-07T14:50:34.603 回答
0

你可以使用这样的东西:

Map<Integer, Set<Integer>> result = new TreeMap<Integer, Set<Integer>>();

public void parseInput(int key, int value) {
    if(result.get(key) == null) { // if you have not encountered the first integer yet, add it to your map.
        result.put(key, new TreeSet<Integer>() {{ add(value); }});
    } else { // otherwise, just add your value to your existing set. The set will take care of duplicates.
        result.get(key).add(value);
    }
}
于 2013-03-07T14:58:08.023 回答