在我的类中调用方法会声明“不兼容的类型”,即使它不是?

时间:2016-09-01 05:22:30

标签: java arrays class methods constructor

我不知道为什么我的类方法不会接受矩阵作为输入,尽管它是int[][]

这是我的主要内容:

public class Lab1 {
    public static void main(String[] args) {
        Matrix One = new Matrix(3, 3);
        Matrix.viewMatrix(One);
    }
}

/**
 * Here's my class called "Matrix":
 **/
public class Matrix {
    private int rows;
    private int columns;

    Matrix() {}

    Matrix(int rows, int columns) {
        this.rows = rows;
        this.columns = columns;
        int[][] matrix = new int[rows][columns];
    } // matrix constructor

    public void viewMatrix(int[][] a) {

    } // viewMatrix
} // class   

4 个答案:

答案 0 :(得分:2)

viewMatrix(int[][] a)签名不允许Matrix.viewMatrix(One)来电,因为Matrix不是int[][]

我建议您将签名更改为viewMatrix()并在其中打印matrix实例字段(如Arrays.deepToString(matrix))。问题是matrix不是您案例中的实例字段。这样做:

private int[][] matrix;
Matrix (int rows, int columns) { matrix = new int[rows][columns]; } 

此外,您无需将rowscolumns作为字段。您将通过matrix.lengthmatrix[0]==null ? 0 : matrix[0].length来电获取。

int[]Matrix是引用类型。 Matrix类是否包含int数组并不重要,它不是int[]无论如何都是{。}}。

此处还有另一个问题 - 第Matrix.viewMatrix(...);行。该方法不是静态的,因此您无法通过类名调用它。但您可以像One.viewMatrix(...)一样自由地执行此操作(通过JCC,最好将变量命名为onefirstMatrix)。

答案 1 :(得分:2)

viewMatrix()不是静态的,因此应使用对象调用它,在您的情况下,Oneint[][]Matrix不同。

我假设您要对One的矩阵数组执行某些操作,然后您只需调用One.viewMatrix()并访问其matrix变量this.matrix viewMatrix()

        public class Lab1 {
            public static void main(String[] args) {
                Matrix One = new Matrix(3, 3);
                // One is a instance of Matrix class
                // So it should be
                One.viewMatrix();  
            }
        }
/** 
Here's my class called "Matrix":
**/   
        public class Matrix {
            private int rows;
            private int columns;
            private int[][] matrix; <= you need this

            Matrix() { 
            }

            Matrix (int rows, int columns) {
                this.rows = rows;
                this.columns = columns; 
                this.matrix = new int[rows][columns];
            } // matrix constructor

            public void viewMatrix() {
               // viewMatrix can access array using this.matrix

            } // viewMatrix
        } // class

答案 2 :(得分:0)

当你这样做时

is-opened

您正在创建Matrix类型的新对象。因此,当您拨打下一个电话时,

Matrix One = new Matrix(3, 3);

你传递的是一个Matrix对象,它不是一个int [] []数组,就像它期待的那样。

我认为您的混淆可能是您在Matrix构造函数中创建了一个int [] []。

答案 3 :(得分:-1)

viewMatrix方法在int类型上接受2维数组,并且您正在尝试发送Matrix对象,这两个不兼容。您可以做的是

public class Matrix {
        private int rows;
        private int columns;
        private int[][] matrix;
        Matrix() { }

        Matrix (int rows, int columns) {
            this.rows = rows;
            this.columns = columns; 
            matrix = new int[rows][columns];
        } // matrix constructor

        public void viewMatrix(int[][] a) {

        } // viewMatrix
    } // class


public class Lab1 {
        public static void main(String[] args) {
            Matrix One = new Matrix(3, 3);

            One.viewMatrix(One.getMartix());  
        }
    }