2015-09-08 4 views
0

У меня есть класс Matrix, который содержит определение класса:Pass объект класса в метод другого класса

import java.util.Scanner; 

public class Matrix { 

    private int[][] matrix; 

    //construct matrix with given number of rows and columns 
    public Matrix(int n, int m){ 
     matrix = new int[n][m]; 
    } 

    //input values into matrix 
    public void readMatrix(){ 
     Scanner input = new Scanner(System.in); 
     for (int r = 0; r < matrix.length; r++){ 
      for (int c = 0; c < matrix[r].length; c++){ 
       matrix[r][c] = input.nextInt(); 
      } 
     } 
    } 

    //display values of matrix 
    public void displayMatrix(){ 
     for (int r = 0; r < matrix.length; r++){ 
      for (int c = 0; c < matrix[r].length; c++){ 
       System.out.print(matrix[r][c] + " "); 
      } 
      System.out.print("\n"); 
     } 
    } 
} 

и класс MatrixApp, который содержит основной:

import java.util.Scanner; 

public class MatrixApp { 

    public static void main(String[] args) { 
     Matrix m1 = null; //create matrix m1 
     promptMatrix(m1); //ask for data for m1 from user 
     m1.displayMatrix(); //display m1 
    } 

    private static void promptMatrix(Matrix m) { 
     Scanner input = new Scanner(System.in); 
     int rows, columns; 
     //ask for number of rows 
     System.out.print("Enter the number of rows: "); 
     rows = input.nextInt(); 
     //ask for number of columns 
     System.out.print("Enter the number of columns: "); 
     columns = input.nextInt(); 
     //create matrix 
     m = new Matrix(rows, columns); 
     //ask for matrix data 
     System.out.println("Enter matrix: "); 
     m.readMatrix(); 
    } 
} 

я получаю ошибка исключения нулевого указателя на m1.displayMatrix(). Я думаю, это потому, что ничего не было сохранено в m1, хотя я передал m1 методу promptMatrix. Почему это и как я могу это решить, пожалуйста?

ответ

0

Edit: я сделал ошибку, как к месту, где встречающейся ошибка (моя ошибка, я не читал достаточно хорошо, однако, что написано ниже, полезно понять, как лучше писать код в апе. легко читается, поэтому я оставлю это.

< ---- Все, что находится между этим и нижеследующим маркером, неверно, чтобы решить эту проблему, но помогает понять, что ниже, что может принести пользу, поэтому я оставляя его вверх ---->

Ну, как вы сказали, m1 имеет значение null, и вы передаете его методу, потому что вы получаете исключение NullPointerException. Вам нужно будет инициализировать объект Matrix с помощью нового оператора. Матрица m1 = новая матрица (n, m); // n и m любые значения, которые они должны быть // поскольку конструктор по умолчанию не существует Однако это не лучший способ выполнить то, что вы пытаетесь сделать.

< ---- Все, что между этим и выше маркера не является правильным, чтобы решить эту проблему, но и помогает понять, что дальше, ниже которого может иметь преимущество, так что я уезжаю это ---->

Правильный способ сделать это - вернуть метод вместо объекта Matrix.

метод будет выглядеть следующим образом:

public static Matrix promptMatrix() { 
    //code to get n and m and set up matrix 
    return new Matrix(n, m); 
} 

Затем в основной метод вы могли бы сделать:

Matrix m1 = promptMatrix(); 
1

Вы создали свой Matrix в методе promptMatrix, но помните, что m просто копия справки, которая была передана в первоначально - null. Вы правильно создаете Matrix, так что m относится к новому Matrix. Но, m1 в main не изменилось - это все еще null.

Возврат m от promptMatrix и присвоение его m1.

0

Создайте объект класса MatrixApp и вызовите функцию promptMatrix().

public class MatrixApp { 

public static void main(String[] args) { 
    MatrixApp m1 = new MatrixApp(); //create MatrixApp m1 
    m1.promptMatrix(); 

} 

private static void promptMatrix() { 
    Scanner input = new Scanner(System.in); 
    int rows, columns; 
    //ask for number of rows 
    System.out.print("Enter the number of rows: "); 
    rows = input.nextInt(); 
    //ask for number of columns 
    System.out.print("Enter the number of columns: "); 
    columns = input.nextInt(); 
    //create matrix 
    m = new Matrix(rows, columns); 
    //ask for matrix data 
    System.out.println("Enter matrix: "); 
    m.readMatrix(); 
    m.displayMatrix(); //display m 
} 
} 
+0

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

Смежные вопросы