Reputation: 151
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) should be printing out the contents of the array when called. But when I tried to print the array in the last 2 lines of the code, I get the addresses instead of the content. Can anyone please help me understand why that is?
Upvotes: 1
Views: 1327
Reputation: 1491
You can call Arrays.toString() for each line of the matrix or 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));
}
}
Output:
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]]
Upvotes: 0
Reputation: 9608
Arrays.toString (int[]) supports array (one-dimension), not matrices (two + dimension)
Upvotes: 0
Reputation: 1500785
You're seeing the results of calling toString()
on each element of your top array. But each element is itself an array. Use Arrays.deepToString()
instead:
System.out.println(Arrays.deepToString(m.toPow(2)));
Upvotes: 5
Reputation: 16049
Arrays.toString()
only works for one-dimensional arrays. Try iterating over the rows of the array and using Arrays.toString()
on each row separately.
Upvotes: 1