当我调用第二种初始化方法而不是第一种初始化方法时,就会出现问题。
我已经查看了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
出现
答案 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。