试图用ArrayList创建一个Matrix?

时间:2018-03-30 06:35:19

标签: java list matrix arraylist collections

尝试创建具有int列,行和值的泛型类型的矩阵对象。 注意:下面的代码使用整数类型来简化。

示例输出:

21  703   22   23   

3   3   13  13  6

   studone   studtwo  studthree

   studfour  studnine studten

   studran  studmoreran studplus

尝试:

  • 决定创建一个ArrayList,因为它可以扩展
  • 我的想法:Matrix将有col,rows ...所以x ArrayList的行和y ArrayList的cols

    • 无法测试代码,但我觉得必须有更好的方法,for循环似乎过多了?

这是构造函数:

private ArrayList<ArrayList<Integer>> matrixOne;

public Matrix(int rows, int columns) {

    this.rows = rows;
    this.columns = columns;

    matrixOne = new ArrayList<ArrayList<ArrayList>>();

    for(int i = 0; i < rows; i++) {
        matrixOne.add(new ArrayList<ArrayList>());
    }
    for(int j = 0; j < columns; j++)  {
        matrixOne.get(j).add(new ArrayList<Integer>()); 
    }

}
  

问题:当尝试为特定行/ col添加值时,我得到了   以下方法中的跟随错误:类型为Integer的方法add(int)未定义

 // on method .add()      <-------- error
public void insert(int row, int column, int value) {
    matrixOne.get(row).get(column).add(value);
} 

3 个答案:

答案 0 :(得分:1)

你正在遮蔽你的领域

private ArrayList<ArrayList<Integer>> matrixOne;

ArrayList<ArrayList<ArrayList>> matrixOne = new ArrayList<ArrayList<ArrayList>>();

除了ArrayList之外没有任何其他类型。试试这个:

matrixOne = new ArrayList<ArrayList<Integer>>();

for shadowing a class variable

答案 1 :(得分:1)

我建议您改用维数数组。以下是将列表(矢量)转换为维数组的简单实现。灵感来自R的matrix(vec,nrow = 3,ncol = 3)

public static void main(String[] args){
    int[] vec = {2,3,4,5,6,7,8,9,10};
    toMatrix(vec,3,3);//parameters: vector(list),row of expected matrix,column of expected matrix
}
public static int[][] toMatrix(int[] vec,int row ,int col){
     int[][] matrix = new int[row][col]; 
        int vecIndex = 0;//list index to pop the data out from vector
        //Vector to matrix transformation
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                if(vecIndex==vec.length) break;
                matrix[i][j] = vec[vecIndex++];//pop the vector value
            }
        }

        // Displaying the matrix, can ignore if not necessary
        for(int i=0;i<row;i++){ 
            for(int j=0;j<col;j++){              
                System.out.print(matrix[i][j] + "   ");
            }
            System.out.println();
         }
        return matrix;
}

答案 2 :(得分:0)

试试这个:

public void insert(int row, int column, int value) {
    matrixOne.get(row).add(column, value);
}