Как создать метод toString для 2d-массива

#java #matrix

#java #матрица

Вопрос:

Я пишу программу для матричных вычислений, и она должна включать метод toString для отображения матрицы. Это то, что у меня есть до сих пор, но я не уверен, правильно ли я это делаю.

Ответ №1:

С Java 8 вы можете сделать это очень элегантно:

     public String toString() {
        return Stream.of(info).map(Arrays::toString).collect(Collectors.joining("n"));
    }
 

Простой toString метод (без использования потоков) для a matrix может быть чем-то вроде:

 public String toString() {
    StringBuilder str = new StringBuilder(); 
    for (int i = 0; i < info.length; i  ){
       for (int j = 0; j < info[i].length; j  )
           str.append(info[i][j]).append(" ");
       str.append("n");
    }
    return str.toString();
}
 

У вас есть несколько ошибок в вашем коде.

В вашем конструкторе вам не хватает двух параметров (т. Е. r и c). Однако они вам на самом деле не нужны; вы можете просто использовать matrix переданный в качестве параметра для info определения размера матрицы.

 // Constructor 
public Matrix(double[][] info) {
    this.info = new double[info.length][info[0].length];
    for (int i = 0; i < info.length; i  ) {
        for (int j = 0; j < info[0].length; j  ) {
            this.info[i][j] = info[i][j];
        }
    }
}
 

Конструктор предназначен для вызова из-за пределов вашего класса:

 //calling the constructor ?
Matrix second = new Matrix(new double[][]{{2, 8},{-4, 6},{0, -2}});
 

например:

 class Main {  
  public static void main(String args[]) { 
     Matrix second = new Matrix(new double[][]{{2, 8},{-4, 6},{0, -2}}); 
  } 
}
 

Наконец, вам не нужны переменные для хранения размеров матрицы

  this.a = r;
 this.b = c;
 

эта информация может быть получена в Java из самой матрицы.

Ответ №2:

Если вы поместите это в основной метод, он будет работать нормально:

 public static void main(String[] arg){
        //calling the constructor ?
        Matrix second = new Matrix(new double[][]{{2, 8}, {-4, 6}, {0, -2}});
        for(double[] i: second.info){
            for(double j: i){
                System.out.println(j);
            }
        }
    }
 

Помните только, что во втором кострукторе вы должны написать это:

 public Matrix(double[][] info) {

        this.info = info;
}
 

поскольку параметром является информация, а не размер матрицы.

Комментарии:

1. Вы перепутались в for (int j = 0; j < info[0].length; j )