[b]import java.util.Arrays;public class Main
{
public static void main(String[] args)
{
DataStore d = new DataStore(5,5);[/b] //构造方法 DataStore(int height,int width) 创建 二维数组的行和列 System.out.println(d); // d.toString();
}
}class DataStore
{
private int row;
private int column; public DataStore(int height,int width)
{
row=height;
column=width;
}
// 重写toString()
public String toString()
{
byte [][] grid = new byte [row][column]; // 下面就是给二维数组元素赋值,每个元素都是grid[i][j]=5;
for (int i=0;i< row;i++) //control row
{
for (int j=0;j< column;j++) //control column
{
grid[i][j]=5;
} System.out.println();// 会有5行空行
}
return Arrays.toString(grid); // 问题出在这里
// 我的目的是在 main 方法调用 toSring() 的时候
// 能打印 grid[][] 这个二维数组
// 现在的问题是 它就返回 5行空白行 和 5个数组地址
// [[B@c17164, [B@1fb8ee3, [B@61de33, [B@14318bb, [B@ca0b6] /* 如果我直接 用return grid; 的话, 它会报错,说类型不符合 String,因为 grid 是 数组类型
* 然后我就用 Arrays.toString(grid) 把数组转化为String类后 返回,不报错,但却得到的是地址 * 请问: 要返回怎样一个值才能打印出我想要的这个二维数组,而不是地址呢?
* 谢谢!
*/
}}
{
public static void main(String[] args)
{
DataStore d = new DataStore(5,5);[/b] //构造方法 DataStore(int height,int width) 创建 二维数组的行和列 System.out.println(d); // d.toString();
}
}class DataStore
{
private int row;
private int column; public DataStore(int height,int width)
{
row=height;
column=width;
}
// 重写toString()
public String toString()
{
byte [][] grid = new byte [row][column]; // 下面就是给二维数组元素赋值,每个元素都是grid[i][j]=5;
for (int i=0;i< row;i++) //control row
{
for (int j=0;j< column;j++) //control column
{
grid[i][j]=5;
} System.out.println();// 会有5行空行
}
return Arrays.toString(grid); // 问题出在这里
// 我的目的是在 main 方法调用 toSring() 的时候
// 能打印 grid[][] 这个二维数组
// 现在的问题是 它就返回 5行空白行 和 5个数组地址
// [[B@c17164, [B@1fb8ee3, [B@61de33, [B@14318bb, [B@ca0b6] /* 如果我直接 用return grid; 的话, 它会报错,说类型不符合 String,因为 grid 是 数组类型
* 然后我就用 Arrays.toString(grid) 把数组转化为String类后 返回,不报错,但却得到的是地址 * 请问: 要返回怎样一个值才能打印出我想要的这个二维数组,而不是地址呢?
* 谢谢!
*/
}}
return Arrays.sort(grid)难道这样不行吗?
// 可以将grid看成一个一维数组
byte[][] grid = new byte[row][];
for(int i=0; i<row; i++) {
// grid数组中的每一个元素又是一个一维数组
tmp[i] grid= new byte[column];
for (int j=0; j<column; j++) {
grid[i][j] = 5;
}
}
需要注意的是Arrays.toString的操作对象是一个一维数组。
了解了二维数组与一维数组的关系后,我们可以看出下面的代码
byte[][] grid = ...;
return Arrays.toString(grid);
其本质可以用以下的代码表示:
byte[][] grid = ...;
String[] tmp = new String [row];
for (int i = 0; i < row; i++) {
// 此处是将grid[i][]当成一个对象看待
tmp[i] = grid[i].toString();
}
return Arrays.toString(tmp);
正确的处理方法应该是:
byte[][] grid = ...;
String[] tmp = new String [row];
for (int i = 0; i < row; i++) {
// 此处是将grid[i][]当成一个一维数组看待
tmp[i] = Arrays.toString(grid[i]);
}
return Arrays.toString(tmp);
{
for (int j=0;j < column;j++) //control column
{
str.append(grid[i][j] + " ") ;
}
}
return str.toString() ;这样不一样吗 str是StringBuffer的
java.lang.Object
java.util.Arrays
public static String toString(byte[] a)
import java.util.Arrays; public class Main
{
public static void main(String[] args)
{
DataStore d = new DataStore(5,5); //构造方法 DataStore(int height,int width) 创建 二维数组的行和列 System.out.println(d); // d.toString();
}
} class DataStore
{
private int row;
private int column; public DataStore(int height,int width)
{
row=height;
column=width;
}
// 重写toString()
public String toString()
{
String resultString="";//此处不要写成String resultString=null;
//System.out.println(resultString); //写成String resultString=null会输出null;
byte [][] grid = new byte [row][column]; // 下面就是给二维数组元素赋值,每个元素都是grid[i][j]=5;
for (int i=0;i < row;i++) //control row
{
for (int j=0;j < column;j++) //control column
{
grid[i][j]=5;
}
// System.out.println();// 会有5行空行
}
for(int i=0;i<row;i++)
{
resultString+=Arrays.toString(grid[i]);
resultString+="\n";
}//因为是不能直接二维数组,直接返回Arrays.toString(grid)得到每一个grid[row]的地址。
//可以通过循环得到每一个grid[row]的内容,在累加。返回。
return resultString;
} }
看一下Arrays.toString()会返回什么? byte[] tmp = {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(tmp));上述代码的输出内容是
[1, 2, 3, 4, 5]
这是一种JSON表达式,
我们可以直接利用Arrays.toString的功能完成二维数组的字符串输出。也就是: byte[][] grid = {{1, 2, 3, 4, 5},{11, 12, 13, 14, 15}};
String[] tmp = new String[grid.length];
for (int i=0; i<tmp.length; i++) {
tmp[i] = Arrays.toString(grid[i]);
}
System.out.println(Arrays.toString(tmp)); 上述代码的输出内容是
[[1, 2, 3, 4, 5],[11, 12, 13, 14, 15]]