从静态内容调用的非静态变量,java

-1 java static

我知道之前已回答过这个问题,但我仍然无法用我的代码处理它.有人可以指出我如何在这个特定的代码上修复它.我喜欢调用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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Boz*_*zho 5

呼叫 A.trace()

  1. 对变量和字段使用小写名称
  2. 你的main方法是静态的.并且您的trace()方法是类的非静态方法Matrix.这意味着你必须调用trace() 上的一个实例Matrix.