2009-12-11 104 views
-1

我知道这个问题被回答过了,但我仍然无法与我的代码处理。 请有人指出我如何解决这个特定的代码。我想调用trace();但不知道在哪里调用新的跟踪。我尝试了不同的东西,但它对我不起作用。谢谢!非静态变量从静态内容调用java的

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"); 
     } 
    } 
} 
+1

我不反感,请解释“新跟踪”的含义。 trace()是一个方法,所以你不能创建它的一个实例。 – Sylar 2009-12-11 07:46:18

回答

5

呼叫A.trace()

  1. 使用小写的变量和字段名
  2. main方法是静态的。并且您的trace()方法是Matrix类的非静态方法。这意味着您必须致电trace()Matrix的实例
1

你需要调用trace()方法的类型矩阵的一个实例。

你可以简单地这样做:

A.trace(); 
3

你正试图从主静态方法调用非静态方法跟踪()()。由于'main'是静态的,因此它只能引用类中的静态变量和静态方法。您将需要使用Matrix的实例来调用跟踪。例如:

Matrix A = Matrix.random(x,y,r); 
A.trace();