将矩阵转换为字符串

时间:2013-04-28 07:39:34

标签: java matrix tostring

我正在写一个矩阵,但不幸的是我坚持输出。 它没有显示矩阵,而是显示了类似的内容:

实际矩阵是 矩阵@ 512fb063

我需要将矩阵转换为字符串,以便输出如下所示:

expected the matrix: 
3   8   72
4   6   60
253 2   1

我写的代码是:

import java.util.Random;
final public class Matrix {
private final int size1;             // number of rows
private final int size2;             // number of columns
private final int[][] data;   // M-by-N array

// create size1-by-size2 matrix of 0's
public Matrix(int size1, int size2) {
    this.size1 = size1;
    this.size2 = size2;
    data = new int[size1][size2];
}

// create matrix based on 2d array
public Matrix(int[][] data) {
    size1 = data.length;
    size2 = data[0].length;
    this.data = new int[size1][size2];
    for (int i = 0; i < size1; i++)
        for (int j = 0; j < size2; j++)
                this.data[i][j] = data[i][j];
}

// creates and returns a random size1-by-size1 matrix with values between 0 and 255
public String toString(int size1, int size2) {
    Matrix A = new Matrix(size1, size2);
    String str = " ";
   final int white = 0;
   final int black = 255;
    for (int i = 0; i < size1; i++)
        for (int j = 0; j < size2; j++)
        {

         A.data[i][j] = white + (int)(Math.random() * ((black ) ));
         str = (A.data[i][j]+"\t"+A.data[i][j+1]);
         if (i==size1 &&j==size2) str = (A.data[i][j]+"\n");

        }

     return str;  

 }

4 个答案:

答案 0 :(得分:2)

您需要覆盖public String toString()功能。你现在正在做的是创建一个名为String toString(int size1, int size2)的新函数。

写作时不会调用您的新函数:

 System.out.println(myMatrix);

你可以这样做:

 System.out.println(myMatrix.toString(2, 2));

或覆盖默认的toString()功能。

因此以下代码应该有效:

@Override
public String toString() {
    Matrix A = new Matrix(size1, size2);
    String str = " ";
   final int white = 0;
   final int black = 255;
    for (int i = 0; i < size1; i++)
        for (int j = 0; j < size2; j++)
        {

         A.data[i][j] = white + (int)(Math.random() * ((black ) ));
         str = (A.data[i][j]+"\t"+A.data[i][j+1]);
         if (i==size1 &&j==size2) str = (A.data[i][j]+"\n");

        }

     return str;  

 }

其中size1size2是类中的变量。

答案 1 :(得分:0)

您可以这样做:

@Override
public String toString()
{
    return toString(size1,size2);
}

编辑:如果您想反映当前Matrix的实际内容:

@Override
public String toString()
{
    StringBuilder sbResult = new StringBuilder();

    for(int i = 0; i < size1;i++)
    {
        for(int j = 0; j < size2;j++)
        {
             sbResult.append(A.data[i][j]);
             sbResult.append("\t");
             sbResult.append(A.data[i][j+1]);

             if(i == size1 && j == size2)
             {
                 sbResult.append("\n");
             }
        }
    }

    return sbResult.toString();
}

答案 2 :(得分:0)

actual matrix is Matrix@512fb063的输出实际上是你的Matrix类实例所在的Java中的内存地址。那是因为你的程序不知道如何“打印”这个类 - 它并不神奇地知道你想要它的行/列表示。

你有很多选择:

  1. 您的toString(int size1, int size2)非常完美。因此,当您想要打印矩阵时,System.out.println(someMatrix.toString(2,2))可以使用someMatrix是Matrix类的实例。

  2. 如果你想让它正常运行System.out.println(someMatrix)那么你将需要覆盖你的Matrix类'toString()函数。您 - 几乎 - 在您的toString(int size1, int size2)函数中执行了此操作,但它不起作用,因为它需要完全匹配参数,即:toString()应该采用0参数。您需要编写一个toString()方法,然后可以调用toString(int size1, int size2)

答案 3 :(得分:0)

不知何故,您获得了哈希码。也许你可以使用http://math.nist.gov/javanumerics/jama/doc/矩阵实现。 我认为这条线不起作用 str =(A.data [i] [j] +“\ t”+ A.data [i] [j + 1]); 你没有得到IndexOutOfBoundexception吗?无论如何A.data [i] [j + 1]在循环中总是空的。顺便说一下,Java中的变量总是小写的。