2014-11-02 6 views
1

Как я могу обратиться к объекту, в котором я реализую метод экземпляра. Я написал класс под названием MatrixMaker который выглядит следующим образом:Печать объекта массива с использованием простого метода печати

package one; 

public class MatrixMaker { 

private int rows; 
private int columns; 

public MatrixMaker(int m, int n){ 
    rows = m; 
    columns = n; 
    double[][] matrix = new double[rows][columns]; 

} 

public void printer(){ 
    for(int i = 0; i < rows; i++){ 

     for(int j = 0; j < columns; j++){ 

      System.out.print(matrix[i][j]); 
     } 
     System.out.println(); 
    } 

} 

}

Я инициализируется объект в этом классе с использованием:

MatrixMaker matrix = new MatrixMaker(3,4); 

Мой вопрос, как я могу использовать

matrix.printer(); 

для печати массива. Я не могу ссылаться на содержимое объекта внутри метода printer(). В частности, линия:

System.out.print(matrix[i][j]); 
+0

Определите 'double [] [] matrix' в области вашего класса. Поэтому поместите его туда, где 'private int columns;' есть. –

+0

Спасибо! Я даже об этом не думал. – zyzz

ответ

2

Ваш double[][] matrix переменная является локальной для конструктора, так что существует только в пределах конструктора. Сделайте его переменной экземпляра, чтобы получить доступ к нему из других методов.

public class MatrixMaker { 

private int rows; 
private int columns; 
private double[][] matrix; 

public MatrixMaker(int m, int n){ 
    rows = m; 
    columns = n; 
    matrix = new double[rows][columns]; 

} 

Это позволит сделать его доступным методом printer. ...

+0

Это сработало! Еще раз спасибо. Я должен был подумать об этом. – zyzz

2

Ваш matrix массив является локальной переменной внутри конструктора MatrixMaker(int m, int n). Если вы внесете его в переменную-член, вы сможете получить к нему доступ из других методов.

public class MatrixMaker { 

    private int rows; 
    private int columns; 
    private double[][] matrix; 

    public MatrixMaker(int m, int n){ 
     rows = m; 
     columns = n; 
     matrix = new double[rows][columns]; 
    } 
2

Вы определили матрицу как локальную переменную в конструкторе класса Matrix. Этот класс не будет компилироваться.

Попробуйте определении вашей матрицы в качестве поля:

public class MatrixMaker { 

    private int rows; 
    private int columns; 
    private double[][] matrix; 

    public MatrixMaker(int m, int n){ 
     rows = m; 
     columns = n; 
     matrix = new double[rows][columns]; 

    } 

    public void printer(){ 
     for(int i = 0; i < rows; i++){ 
      for(int j = 0; j < columns; j++){ 
      System.out.print(matrix[i][j]); 
     } 
     System.out.println(); 
    } 
} 
2

Вы должны объявить переменную матрицу внутри вашего класса, чтобы сделать его переменной-члена, а не в качестве локальной переменной в конструкторе.

public class MatrixMaker(int m, int n) { 
    private int rows; 
    private int columns; 
    private double[][] matrix; 
    ... 
1

Попробуйте:

import java.util.Scanner; 

public class MatrixMaker { 

private int rows; 
private int columns; 
double[][] matrix; 

public MatrixMaker(int m, int n){ 
rows = m; 
columns = n; 
matrix = new double[rows][columns]; 

} 

public void printer(){ 
    for(int i = 0; i < rows; i++){ 

    for(int j = 0; j < columns; j++){ 

     System.out.print(matrix[i][j]+" "); 
    } 
    System.out.println(); 
} 

} 

public static void main(String[] args) { 
    MatrixMaker m=new MatrixMaker(4,4); 
    Scanner in=new Scanner(System.in); 
    System.out.println("Enter Matrix Elements:"); 
    for(int i=0;i<m.rows;i++){ 
    for(int j=0;j<m.columns;j++) 
     m.matrix[i][j]=Integer.parseInt(in.next()); 
     } 

    in.close(); 

    m.printer(); 
} 

} 

Обеспечить ввод в консоли следующим образом:

1 2 3 4 
1 2 3 4 
1 2 3 4 
1 2 3 4 

Или вы можете предоставить Вводимые один за другим, как: ..