代码之家  ›  专栏  ›  技术社区  ›  Rafe Kettler

测试Java代码时“找不到符号”

  •  1
  • Rafe Kettler  · 技术社区  · 14 年前

    我已经开始编写一个模型矩阵的类,编译器给了我以下信息:

    Matrix.java:4: cannot find symbol
    symbol  : constructor Matrix(int[][])
    location: class Matrix
      Matrix y = new Matrix(x);

    这是我试图编译的代码:

    public class Matrix<E> {
        public static void main(String[] args) {
            int[][] x = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}};
            Matrix y = new Matrix(x);
            System.out.println(y.getRows());
            System.out.println(y.getColumns());
        } 
        private E[][] matrix;
        public Matrix(E[][] matrix) {this.matrix = matrix;}
        public E[][] getMatrix() {return matrix;}
        public int getRows(){return matrix.length;}
        public int getColumns(){return matrix[0].length;}
    }
    

    所以,我的问题是,为什么我会得到这个错误,我应该改变什么来修复这个错误?

    3 回复  |  直到 11 年前
        1
  •  2
  •   duffymo    14 年前

    尝试如下:

    public class Matrix<E> {
        public static void main(String[] args) {
            Integer [][] x = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {0, 1, 0}};
            Matrix<Integer> y = new Matrix<Integer>(x);
            System.out.println(y.getRows());
            System.out.println(y.getColumns());
    
            System.out.println("before: " + y);
            Integer [][] values = y.getMatrix();
            values[0][0] = 10000;
            System.out.println("after : " + y);
        }
        private E[][] matrix;
        public Matrix(E[][] matrix) {this.matrix = matrix;}
        public E[][] getMatrix() {return matrix;}
        public int getRows(){return matrix.length;}
        public int getColumns(){return matrix[0].length;}
        public String toString()
        {
            StringBuilder builder = new StringBuilder(1024);
            String newline = System.getProperty("line.separator");
    
            builder.append('[');
            for (E [] row : matrix)
            {
                builder.append('{');
                for (E value : row)
                {
                    builder.append(value).append(' ');
                }
                builder.append('}').append(newline);
            }
            builder.append(']');
    
            return builder.toString();
        }
    }
    

    在我的机器上编译和运行。

    你需要考虑一些其他的事情:封装以及当“私有”不是私有的时候。查看对代码的修改,看看我如何修改您的“私有”矩阵。

        2
  •  1
  •   Bozho    14 年前

    试用使用 Integer[][] 而不是 int[][] . 构造函数需要前者(因为没有基元类型参数),而您正在传递后者。

        3
  •  -2
  •   Community Dan Abramov    7 年前

    在Java中没有通用数组创建。见 How to create a generic array in Java?