我的程序获得的输入是几个字符串,表示矩阵中的行。我想将此矩阵的列放在LinkedHashMap中,但不首先将所有内容存储在数组中,然后构造列并将它们放在LinkedHashMap中。这个想法是应该尽快完成。
示例:
输入:
abfad
grgaa
rtwag
应该在LinkedHashMap中保存的字符串是:
AGR
BRT
FGW
AAA
DAG
编辑:
这就是我的程序现在的工作方式:
String[][] array = new String[n][m];
LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
for (int i = 0; i < n; i++) {
array[i] = br.readLine().split("");
}
for (int i = 0; i < m; i++) {
String column = "";
for (int j = 0; j < n; j++) {
column += array[j][i];
}
map.put(i, column);
}
答案 0 :(得分:1)
我不确定为什么这会被贬低。
这是一个有趣的问题,你或许应该问一下。
如果您将此视为矩阵的实时转换,这会有帮助吗?阅读第一行时会发生什么?每个后续行应该怎么办?我们假设所有行都有相同的长度,否则我们需要指定当它们没有时会发生什么。
在你自己尝试之后,也许你可以看看下面的内容。我没有在那里使用LinkedHashMap
,我也使用了可变StringBuilder
。但您可以轻松修改它以使用您选择的数据结构。
public class RealTimeTransform {
public static void main(String[] args) throws IOException {
Map<Integer, StringBuilder> columns = new HashMap<>();
readColumnsFromRows(columns, System.in);
System.out.println(columns.values());
}
private static void readColumnsFromRows(Map<Integer, StringBuilder> columns, InputStream in) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
int rc = 0;
String row;
while ((row = reader.readLine()) != null) {
if (rc == 0) {
for (int i = 0; i < row.length(); i++) {
columns.put(i, new StringBuilder(10).append(row.charAt(i)));
}
} else {
for (int i = 0; i < row.length(); i++) {
columns.get(i).append(row.charAt(i));
}
}
rc += 1;
}
}
}
打印:
aman
plan
yess
[apy, mle, aas, nns]
根据您的规范。