Java 具有3列的表的排序数组
我有一个元素列表,希望显示如下列表:Java 具有3列的表的排序数组,java,Java,我有一个元素列表,希望显示如下列表: 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;
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++;
}
List beanz=Arrays.asList(“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“I”);
String[]sortedBeanz=新字符串[beanz.size()];
int i=0;
而(i
我被卡住了,不知道自己做错了什么一种巧妙的Java 8方法:
List<String> beanz = Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I");
String in = String.join("", beanz);
System.out.println(in.replaceAll("(.)..", "$1"));
System.out.println(in.replaceAll(".(.).", "$1"));
System.out.println(in.replaceAll("..(.)", "$1"));
ADG
BEH
CFI
List beanz=Arrays.asList(“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“I”);
String in=String.join(“,beanz);
System.out.println(in.replaceAll(“(……”,“$1”);
System.out.println(in.replaceAll(“.(.”,“$1”);
System.out.println(in.replaceAll(“..(.”,“$1”);
ADG
贝赫
CFI
您可以简单地使用循环
List<String> beanz = Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I");
for (int i = 0; i < beanz.size()/3; i++){
for (int j = i; j < beanz.size(); j += 3){
System.out.print(beanz.get(j));
}
System.out.println("");
}
如果需要3列视图-
List<String> beanz = Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L");
int rows = beanz.size()/3;
for (int i = 0; i < beanz.size()/3; i++){
for (int j = i; j < beanz.size(); j += rows){
System.out.print(beanz.get(j));
}
System.out.println("");
}
List beanz=Arrays.asList(“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“I”、“J”、“K”);
String[]sortedBeanz=新字符串[beanz.size()];
int列=3;
int l=beanz.size();
l=l-(l%列);
对于(int i=0;i
如果不合适,最后一个将被剪切掉这是一个简单但可扩展的解决方案,它将根据输入的大小创建已排序的字符立方体。它将根据输入的大小生成具有3x3或4x4等字符的立方体 这是一种弹性解决方案:
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 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);
}
这将打印出以下多维数据集或已排序的字符:
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 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 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);
}
您将看到:
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
你可以用一个模函数来移动和调整位置,像这样
int i = 0;
int pos = 0;
int shift =3;
while (i < beanz.size()) {
if (i%shift == 0) {
pos= i/shift;
}
sortedBeanz[pos] = beanz.get(i);
System.out.println(pos+ " " + beanz.get(i));
pos+=shift;
i++;
}
inti=0;
int pos=0;
int-shift=3;
而(i
输入是什么?无关:您还没有了解循环的吗?@LutzHorn再次查看代码。无需输入。您了解模运算符(%
)了吗?如果您使用它,它将有助于您的代码。但是,您的示例已经排序,您的目标是选择每三个元素并继续执行某些操作(例如,将元素添加到StringBuilder
。第三个不是字面上的第三个!使用@Andreas建议的mod运算符。我需要数组中的元素,因为另一个应用程序正在处理values@user489872,这不是你要求的!你说我要显示!如果我添加一个字母,它将变成4列la你想要3列的布局吗?例如12个字母的布局会是什么样子?我已经投了赞成票,但不管输入有多大,列的数量应该正好是3。另外,我会在sortsiziable
方法中使用sort
,以防万一输入还没有排序。@zlakad你是对的。问题不是这样的询问有关多维数据集的问题。我没有完全理解。我添加了排序。谢谢。@zlakad我现在为更新中预定义的列数添加了一个解决方案,这是正确的答案!尽管在第三个示例中我不太确定(问题本身不够精确)。这应该是你的回答,或者可能是ACB
D==
。然而,我认为你做得很好,如果OP不满意,他应该自己完成任务…@zlakad再次感谢你。
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
int i = 0;
int pos = 0;
int shift =3;
while (i < beanz.size()) {
if (i%shift == 0) {
pos= i/shift;
}
sortedBeanz[pos] = beanz.get(i);
System.out.println(pos+ " " + beanz.get(i));
pos+=shift;
i++;
}