为什么显示“插入“ SimpleName”以完成ClassType”?

时间:2019-08-20 19:36:44

标签: java

当我调用第二种初始化方法而不是第一种初始化方法时,就会出现问题。

我已经查看了30分钟,找不到任何可解决该错误的信息。

final public class Matrix{
    private final int M, N;//rows and columns
    public final double[][] data;
    public Matrix(int M, int N) {
        this.M = M;
        this.N = N;
        data = new double[M][N];
    }
    public Matrix(double[][] data) {
        M = data.length;
        N = data[0].length;
        this.data = new double[M][N];
        for(int i = 0; i < this.M; i++) {
            for(int j = 0; j < this.N; j++) {
                this.data[i][j] = data[i][j];
            }
        }
    }
    private Matrix(Matrix A) {this(A.data); } // copy matrix
}
private Matrix m1;
m1 = new @Matrix({{1.0,2.0},{1.0,2.0}});
double[][] d;
d = new double[m1.data.length][m1.data[0].length];
for(int i = 0; i < m1.data.length; i++) {
    for(int j = 0; j < m1.data[0].length; j++) {
        d[i][j] = m1.data[i][j];
    }
}
System.out.println(Arrays.deepToString(d));

应该将矩阵打印为数组,但会出现错误:

Syntax error, insert "SimpleName" to complete ClassType
Syntax error, insert "( )" to complete Expression

出现

1 个答案:

答案 0 :(得分:3)

一个,

m1 = new @Matrix({{1.0,2.0},{1.0,2.0}});

应为:

m1 = new Matrix(new double[][]{{1.0,2.0},{1.0,2.0}});

这个地方可能是导致您看到所看到的堆栈跟踪的原因,因为ClassType(定义为here)的格式可以由注释引起。注释(定义为here)可以由@符号引起,所以我认为这就是编译器所抱怨的-启动ClassType但未正确完成。 另外

final public class Matrix{

(出于正确性,不是必需的,但在风格上是一致的)应该是:

public final class Matrix{

确保

private Matrix m1;

被声明为字段。如果它是局部变量,请删除private修饰符。

进行了这些更改之后,我得到了输出:

  

> java Main
  [[1.0,2.0],[1.0,2.0]]

您可以查看我的测试代码here