java - 使用 for 循环用两个一维数组填充二维数组

标签 java arrays for-loop multidimensional-array

我必须用两个一维数组制作二维数组,以便第一行填充来自 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/

相关文章:

java - 范围 "provided"不添加到类路径中的 jars

php - 如何更改此数组的数组键?

C - 以相同方式对两个数组进行排序

c - 如何处理 OpenMP 中的数据争用?

r - 将新列逐行添加到大型数据帧的更快方法

loops - 迭代 Lua Torch 中的目录

java - 有没有像 .NET DataView/DataSet for Java 这样的东西,我可以在其中拍摄一些数据,然后对其执行查询?

java - 使用 GeckoDriver 在 Linux 上运行 Selenium 测试 : driver is not executable

java - 如何在按钮切换组中调整按钮大小

python - 查找(并记录)numpy 数组切片的最大值