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

时间:2009-12-11 07:33:54

标签: 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");
        }
    }
}

3 个答案:

答案 0 :(得分:5)

致电A.trace()

  1. 使用变量和字段的小写名称
  2. 您的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();