我知道之前已经回答过这个问题,但我仍然无法用我的代码处理它。 有人可以指出我如何在这个特定的代码上修复它。我喜欢调用trace();但不知道在哪里称为新的痕迹。我从这里尝试了不同的东西,但它对我不起作用。谢谢!
package matr;
import java.util.Scanner;
final public class Matrix {
private final int M;
private final int N;
private 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 < M; i++)
for (int j = 0; j < N; j++)
this.data[i][j] = data[i][j];
}
private Matrix(Matrix A) {
this(A.data);
}
public static Matrix random(int M, int N, int r) {
Matrix A = new Matrix(M, N);
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
A.data[i][j] = (Math.random() * r);
}
}
return A;
}
public double trace() {
// trace a = new trace();
double t = 0;
for (int i = 0; i < Math.min(M, N); i++) {
t += data[i][i];
}
return t;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("rows: ");
try {
int x = Math.abs(scan.nextInt());
System.out.println("columns: ");
int y = Math.abs(scan.nextInt());
System.out
.println("generate: ");
int r = scan.nextInt();
Matrix A = Matrix.random(x, y, r);
System.out.println("random A");
trace();
} catch (java.util.InputMismatchException e) {
System.out.println("Please enter a valid int");
}
}
}
答案 0 :(得分:5)
致电A.trace()
main
方法是静态的。并且您的trace()
方法是Matrix
类的非静态方法。这意味着您必须在trace()
的实例上调用Matrix
。答案 1 :(得分:3)
您正尝试从静态方法main()调用非静态方法trace()。由于'main'是静态的,因此它只能引用类中的静态变量和静态方法。您将需要使用Matrix实例来调用跟踪。例如:
Matrix A = Matrix.random(x,y,r);
A.trace();
答案 2 :(得分:1)
您需要在Matrix类型的实例上调用trace()方法。
您可以通过以下方式完成此操作:
A.trace();