1

我正在编写一个矩阵,但不幸的是我被输出困住了。它没有显示矩阵,而是向我显示了以下内容:

实际矩阵为 Matrix@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

4 回答 4

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;  

 }

wheresize1size2是类中的变量。

于 2013-04-28T07:42:30.163 回答
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 中的变量总是小写的。

于 2013-04-28T09:49:04.143 回答
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();
}
于 2013-04-28T07:59:58.033 回答
0

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

您有多种选择:

  1. toString(int size1, int size2)是完美的。因此,当您想打印矩阵时,您可以在哪里System.out.println(someMatrix.toString(2,2))工作someMatrixMatrix 类的实例。

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

于 2013-04-28T08:05:51.493 回答