[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类后 返回,不报错,但却得到的是地址       * 请问: 要返回怎样一个值才能打印出我想要的这个二维数组,而不是地址呢?
       * 谢谢!
       */
    }}

解决方案 »

  1.   


    return Arrays.sort(grid)难道这样不行吗?
      

  2.   

    二维数组可以看作是数组元素为一维数组的一维数组,我们可以通过下面的代码来明确这个概念:        
        // 可以将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);
      

  3.   

       for (int i=0;i < row;i++) //control row 
            { 
                for (int j=0;j < column;j++) //control column 
                { 
                 str.append(grid[i][j] + " ") ;
                }          
            } 
          
            return str.toString() ;这样不一样吗 str是StringBuffer的
      

  4.   


    java.lang.Object
      java.util.Arrays
    public static String toString(byte[] a)
      

  5.   


    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; 
        } }
      

  6.   

    grid是个数组嘛 当然不能直接return出来。你可以遍历这个二维数组,然后把数组内元素append到一个StringBuffer对象后面,在toString()输出字符串。
      

  7.   

    楼主使用到了Arrays.toString()的功能。
    看一下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]]