bidimensional arraylists并通过循环输入另一个数组

时间:2012-01-30 14:04:13

标签: java arrays input arraylist

我正在尝试制作一个arylylist,其中基本上是secondArr的行(这是一个二维的arraylist)。问题是当我的cScore.size() == 7 (or equal to secondArr.size(),没有添加到allScore时,而是在所有(在这种情况下为21,myArr.size()=3secondArr.size()=7。将值添加到一个索引,有没有人知道为什么会这样?代码似乎很简单却让我失望。所以最后我想要一个3列7行的arraylist(但在这种情况下只有1列和7行,以及一旦我开始工作,我将添加其余的。)

我的代码如下(这只是一个小小的问题):

    int rowsNum = allScores.size();
    int colsNum = allScores.get(0).size();

    ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(colsNum);
    for (int rowIdx = 0; rowIdx < colsNum; rowIdx++) {
        ArrayList<Integer> rows = new ArrayList<Integer>(rowsNum);
        for (int colIdx = 0; colIdx < rowsNum; colIdx++) {  
            rows.add(allScores.get(colIdx).get(rowIdx)); {
    }
            result.add(rows);
    }

//使用语法prov。由msi ....

原始数组allScores是: [[2,1,3],[3,1,2],[2,1,3],[3,1,2],[2,1,3],[3,1,2],[ 1,2,3]] 当它被转置时,它会重新进入 [[2,3,3,3,2,3,1],[2,3,3,3,3,3,1],[2,3,2,3,2,3,1],[ 2,3,2,3,2,3,1],[2,3,3,3,3,3,1],[2,3,2,3,2,3,1],[2, 3,2,3,2,3,1]]

3 个答案:

答案 0 :(得分:0)

candScore.add(secondArr.get(j).get(k));

不应该是:

cScore.add(secondArr.get(j).get(k));

另外,我觉得你的两个嵌套循环应该是另一种方式。

for (int j=0; j< secondArr.size(); j++){
    for (int k=0; k< myArr.size(); k++) { 

答案 1 :(得分:0)

我不确定你的错误在哪里,但我的猜测是:

  • 可能是你的二维数组的顺序(即它是7 x 3而不是7 x 3)
  • 你真的需要那么多的ArrayLists来实现你的算法吗
  • 提高您的代码质量,例如通过避免使用幻数(7而不是size()),使用extended for loops和断言将极大地轻松找到错误。

答案 2 :(得分:0)

我相信这就是你想要的。此代码转换了2d arraylists,因此列将成为行和行 换位后将成为专栏。

示例:

[[1 2 3], [4 5 6], [7 8 9]] -> [[1 4 7], [2 5 8], [3 6 9]]

此代码假定所有行/列具有相同的长度。

    // arr2d is ArrayList<ArrayList<Integer>>
    int rowsNum = arr2d.size();
    int colsNum = arr2d.get(0).size();

    ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(colsNum);
    for (int rowIdx = 0; rowIdx < colsNum; rowIdx++) {
        ArrayList<Integer> rows = new ArrayList<Integer>(rowsNum);
        for (int colIdx = 0; colIdx < rowsNum; colIdx++) {
            rows.add(arr2d.get(colIdx).get(rowIdx));
        }
        result.add(rows);
    }

...编辑(回答第1条评论)

我不明白你的观点。检查:

    ArrayList<ArrayList<Integer>> arr2d = new ArrayList<ArrayList<Integer>>();
    arr2d.add(new ArrayList<Integer>(2));
    arr2d.add(new ArrayList<Integer>(2));
    arr2d.add(new ArrayList<Integer>(2));
    arr2d.get(0).add(1);
    arr2d.get(0).add(2);
    arr2d.get(1).add(3);
    arr2d.get(1).add(4);
    arr2d.get(2).add(5);
    arr2d.get(2).add(6);
上面的

为您提供:[[1, 2], [3, 4], [5, 6]] -> [[1, 3, 5], [2, 4, 6]]转换。没有您正在谈论的行或列的副本。