我有一个元素列表,并希望显示如下列表:
ADG
BEH
CFI
(表格从左上角到右下角填满)
如果我从列表中删除“I”,我的代码就可以工作……但显然我想让它适用于每种情况:
List<String> beanz = Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I");
String[] sortedBeanz = new String[beanz.size()];
int i = 0;
while (i < beanz.size()) {
int shift = (i * 3) / beanz.size();
int pos = ((i * 3) - beanz.size() * shift);
System.out.println(pos + " " + beanz.get(i));
sortedBeanz[pos] = beanz.get(i);
i++;
}
我被卡住了,无法弄清楚我做错了什么
这是一个简单但可扩展的解决方案,它将根据输入的大小创建排序的字符立方体。它将根据输入的大小生成具有 3 x 3 或 4 x 4 等字符的立方体。
这是一个弹性解决方案:
public static void sortSizeable(List<String> beanz) {
Collections.sort(beanz);
int cols = (int) Math.ceil(Math.sqrt(beanz.size()));
String[][] sortedBeanz = new String[cols][cols];
for (int i = 0; i < beanz.size(); i++) {
int row = i / cols;
int col = i % cols;
sortedBeanz[col][row] = beanz.get(i);
}
System.out.println(Arrays.stream(sortedBeanz)
.map(array -> Arrays.stream(array).collect(StringBuilder::new, (sb, s) -> sb.append(s == null ? "=" : s).append(" "), (sb, s) -> {} ))
.collect(Collectors.joining("\r\n")));
}
下面是一个带有相应输出的测试用例:
public static void main(String[] args) throws IOException {
sortSizeable(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P"));
System.out.println();
sortSizeable(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H"));
System.out.println();
sortSizeable(Arrays.asList("A", "B", "C", "D"));
System.out.println();
sortSizeable(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I"));
System.out.println();
sortSizeable(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R"));
}
这将打印出以下立方体或排序字符:
A E I M
B F J N
C G K O
D H L P
A D G
B E H
C F =
A C
B D
A D G
B E H
C F I
A F K P =
B G L Q =
C H M R =
D I N = =
E J O = =
更新
如果您只需要 3 行的弹性解决方案,这里是解决方案:
public static void sortSizeable2(List<String> beanz) {
Collections.sort(beanz);
final int cols = 3; // Number of columns
int rows = (int) Math.ceil(beanz.size() / (cols * 1.0));
String[][] sortedBeanz = new String[rows][cols];
for (int i = 0; i < beanz.size(); i++) {
int row = i / rows;
int col = i % rows;
sortedBeanz[col][row] = beanz.get(i);
}
printOut(sortedBeanz);
}
如果您在此代码上运行此测试:
public static void main(String[] args) throws IOException {
sortSizeable2(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P"));
System.out.println();
sortSizeable2(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H"));
System.out.println();
sortSizeable2(Arrays.asList("A", "B", "C", "D"));
System.out.println();
sortSizeable2(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I"));
System.out.println();
sortSizeable2(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R"));
}
你会看到这个:
A G M
B H N
C I O
D J P
E K =
F L =
A D G
B E H
C F =
A C =
B D =
A D G
B E H
C F I
A G M
B H N
C I O
D J P
E K Q
F L R
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句