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

Comparableとを使用して、このような出力を実装して印刷できます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]);

ここで、'group' はカンマの前の番号、'member' は後の番号です。グループのマップ エントリを検索し、存在しない場合は作成します。

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 に答える