为什么我得到的是数组的地址而不是值(二维数组)


  5 import java.util.*;
  6 
  7 class Matrix {
  8     // declare the member field
  9     private int[][] matrix;
 10 
 12     public Matrix(int a, int b, int c, int d) {
 13         matrix = new int[2][2];
 14         matrix[0][0] = a;
 15         matrix[0][1] = b;
 16         matrix[1][0] = c;
 17         matrix[1][1] = d;
 18     }
 19     // identity matrix
 20     public Matrix(char i) {
 21         matrix = new int[2][2];
 22         matrix[0][0] = 1;
 23         matrix[0][1] = 0;
 24         matrix[1][0] = 1;
 25         matrix[1][1] = 0;
 26     }
 27 
 29     public int[][] toPow(int n, int[][] matrix) {
 30         if (n == 1)
 31             return matrix;
 32         else {
 33             int[][] temp = matrix;
 34             for (int i = 0; i < 2; i++) {
 35                 for (int j = 0; j < 2; j++) {
 36                     temp[i][j] += matrix[i][j] * this.matrix[j][i];
 37                 }
 38             }
 39             return toPow(n - 1, temp);
 40         }
 41     }
 42     public int[][] toPow(int n) {
 43         return toPow(n, this.matrix);
 44     }
 45 }
 46 
 47 class Maths {
 48 
 49     public static void main(String[] args) {
 55         Matrix m = new Matrix(1,2,3,4);
 56         System.out.println(Arrays.toString(m.toPow(2)));
 57         System.out.println(Arrays.toString(new int[][] {{1,2},{3,4}}));
 58     }
 59 }

调用Arrays.toString(Array)时,应该打印出数组的内容。但是,当我试图在代码的最后2行打印数组时,我得到的是地址而不是内容。有人能帮我理解为什么会这样吗?

您将看到在top数组的每个元素上调用toString()的结果。但每个元素本身就是一个数组。改为使用Arrays.deepToString()

System.out.println(Arrays.deepToString(m.toPow(2)));

Arrays.toString()仅适用于一维数组。尝试在数组的行上迭代,并分别对每行使用Arrays.toString()

Arrays.toString(int[])支持数组(一维),而不是矩阵(二维)

您可以为矩阵的每一行调用Arrays.toString()或Arrays.deepToString().

import java.util.Arrays;
public class Test {
   public static void main(String[] args) {
       new Test().run();
    }
    private void run() {
       int[] v = { 1, 2, 3 };
       int[][] m = { { 1, 1, 1 }, { 2, 2, 2 }, { 3, 3, 3 } };
       System.out.println("Printing the array: ");
       System.out.println(Arrays.toString(v));
       System.out.println("Printing the line addresses: ");
       System.out.println(Arrays.toString(m));
       System.out.println("Priting the matrix: ");
       for (int[] l : m) {
          System.out.println(Arrays.toString(l));
        }  
        System.out.println("Priting the matrix (deepToString): ");
        System.out.println(Arrays.deepToString(m));
   }
}

输出:

Printing the array: 
[1, 2, 3]
Printing the line addresses: 
[[I@3182f0db, [I@b92d342, [I@546b97fd]
Priting the matrix: 
[1, 1, 1]
[2, 2, 2]
[3, 3, 3]
Priting the matrix (deepToString): 
[[1, 1, 1], [2, 2, 2], [3, 3, 3]]

最新更新