我必须用两个一维数组制作二维数组,以便第一行填充来自 arrayCentri 的数据。所有其他行都是 用 arrayTocke 填充。列数为 arrayCentri.length(arrayCentri 中的元素数决定列数),行数应为 (arrayTocke.length/arrayCentri.length) +1(因为第一行是来自 arrayCentri 的数据)。数组的列将代表簇。列的第一个元素将是簇的中心,列的所有其他元素将是簇的点。
我的想法是用 for 循环来实现,这样我就可以遍历数组 arrayCentri 和 arrayTocke 以及 clusterji 但我不明白......
public static void main(String[] args) {
String[] arrayCentri= {"center1","center2","center3"};
String[] arrayTocke= {"tocka1","tocka2","tocka3","tocka4","tocka5","tocka6","tocka7","tocka8","tocka9", "tocka10"};
String[][] clusterji = new String[((arrayTocke.length/arrayCentri.length) +1)][arrayCentri.length];
for (int col = 0; col < clusterji.length; col++) {
for (int row = 0; row < clusterji[0].length; row++) { // why clusterji[0].length? //
for(int i=0; i< arrayCentri.length; i++) {
for (int j=0; j< arrayTocke.length; j++) {
clusterji[0][row]= arrayCentri[i]; // First row is filled with array centri //
clusterji[1][0]= arrayTocke[j]; // From second row there should be filled with arrayTocke //
}
}
}
}
for(int i=0; i<clusterji.length; i++)
{
for(int j=0; j<clusterji[0].length; j++)
System.out.print(clusterji[i][j]+ " ");
System.out.println();
}
}
}
结果是:
center3 center3 center3
tocka10 null null
null null null
null null null
我得到了正确的列数,但行数和数据却没有。应该看起来像这样:
center1 center2 center3
tocka1 tocka2 tocka3
tocka4 tocka5 tocka6
tocka7 tocka8 tocka9
tocka10
那么我哪里出错了?
最佳答案
我建议复制 arrayTocke
中的每三个字符串并使用 Array.copyOfRange(originalArray, int from, int to)
填充二维数组的行
public static void main(String[] args) {
String[] arrayCentri= {"center1","center2","center3"};
String[] arrayTocke= {"tocka1","tocka2","tocka3","tocka4","tocka5","tocka6","tocka7","tocka8","tocka9", "tocka10"};
int rows = arrayTocke.length/arrayCentri.length + (arrayTocke.length%arrayCentri.length == 0 ? 1 : 2);
int columns = arrayCentri.length;
int rowCount = 0;
String[][] clusterji = new String[rows][columns];
clusterji[rowCount++] = arrayCentri;
for(int i=0;i < arrayTocke.length; i += columns){
clusterji[rowCount++] = Arrays.copyOfRange(arrayTocke, i, Math.min(arrayTocke.length,i+columns));
}
Arrays.stream(clusterji).forEach(row->{System.out.println(Arrays.toString(row));});
}
或
使用流
public static void main(String[] args) {
String[] arrayCentri= {"center1","center2","center3"};
String[] arrayTocke= {"tocka1","tocka2","tocka3","tocka4","tocka5","tocka6","tocka7","tocka8","tocka9", "tocka10"};
//concat both arrays to one to get {"center1","center2","center3","tocka1","tocka2" ..."tocka10"}
String[] centriAndTocke = Stream.concat(Arrays.stream(arrayCentri), Arrays.stream(arrayTocke)).toArray(String[]::new);
int columns = arrayCentri.length;
String[][] clusterji = IntStream.iterate(0, i -> i + columns)
.limit((long) Math.ceil((double) centriAndTocke.length / columns))
.mapToObj(j -> Arrays.copyOfRange(centriAndTocke, j, Math.min(centriAndTocke.length, j+columns)))
.toArray(String[][]::new);
Arrays.stream(clusterji).forEach(row->{System.out.println(Arrays.toString(row));});
}
关于java - 使用 for 循环用两个一维数组填充二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57902984/