2009-12-11 75 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();