Java 将矩阵转换为字符串

Java 将矩阵转换为字符串,java,matrix,tostring,Java,Matrix,Tostring,我正在写一个矩阵,但不幸的是我被输出卡住了。 它没有显示矩阵,而是显示如下内容: 实际矩阵为 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

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

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

 }
import java.util.Random;
最终公共类矩阵{
private final int size1;//行数
private final int size2;//列数
私有final int[][]数据;//M-by-N数组
//创建0的大小为1×2的矩阵
公共矩阵(整数大小1,整数大小2){
this.size1=size1;
this.size2=size2;
数据=新整数[size1][size2];
}
//基于二维数组创建矩阵
公共矩阵(int[][]数据){
size1=数据长度;
size2=数据[0]。长度;
this.data=新整数[size1][size2];
对于(int i=0;i
您需要重写
公共字符串toString()
函数。您现在要做的是创建一个名为
字符串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;  

 }
@覆盖
公共字符串toString(){
矩阵A=新矩阵(尺寸1、尺寸2);
字符串str=“”;
最终整数白=0;
最终整数黑色=255;
对于(int i=0;i
其中
size1
size2
是类中的变量。

您可以简单地执行以下操作:

@Override
public String toString()
{
    return toString(size1,size2);
}
编辑:如果要反映当前矩阵的真实内容:

@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();
}
@覆盖
公共字符串toString()
{
StringBuilder sbResult=新建StringBuilder();
对于(int i=0;i
实际矩阵的输出为Matrix@512fb063
实际上是类矩阵实例所在的Java内存地址。这是因为你的程序不知道如何“打印”这个类——它不知道你想要它的行/列表示

您有很多选择:

  • 您的
    toString(int-size1,int-size2)
    非常完美。因此,当您想要打印矩阵时,可以转到
    System.out.println(someMatrix.toString(2,2))
    将在
    someMatrix
    是矩阵类实例的地方工作

  • 如果您想让它正常工作,只需运行
    System.out.println(someMatrix)
    ,那么您需要覆盖矩阵类的“toString()函数”。您在
    toString(int size1,int size2)
    函数中几乎做到了这一点,但它不工作,因为它需要精确匹配参数,即:
    toString()
    应采用0个参数。您需要编写一个
    toString()
    方法,然后该方法可以调用您的
    toString(int-size1,int-size2)


  • 不知怎的,你得到了哈希代码。也许你可以使用矩阵实现。 我想这条线不行 str=(A.data[i][j]+“\t”+A.data[i][j+1]);
    你没有得到IndexOutOfBoundexception吗?无论如何,A.data[i][j+1]在循环中总是空的。顺便说一下,Java中的变量总是小写。

    “这很紧急!”太本地化了。“你需要重写…”…在执行此操作时,请使用
    @Override
    符号来避免类似的问题。对不起,我不明白。整个代码不是都是toString()吗函数?我已经扩展了我的答案。这有帮助吗?不是真的,我很难理解问题到底出在哪里。如果str写得很好,我返回了它,为什么eclipse不给我显示矩阵的数字,而是其他一些东西呢?我只需要知道如何将数组转换成字符串,然后我就可以这样做了我有另一个数组现在的问题..在主类中,矩阵得到特定的数字,而不是我认为的随机数..加上我的输出是一个随机数,而不是一个完整的矩阵。我如何解决这个问题?你在主类中如何构造你的矩阵,他们希望你如何构造特定的矩阵?你的输出应该是整个矩阵很简单-写一个toString()方法,该方法遍历2D数组并打印出元素,即:遍历每一行,打印出元素,然后当您点击该行时,打印一个换行符,然后下一行开始打印。提示:您将需要一个for-for循环。嘿,伙计们!我稍微更改了代码,现在我得到了矩阵的一些输出,但不是全部,为什么?我的代码toString()的作用是:公共字符串toString(){Matrix A=new Matrix(size1,size2);字符串str=”“;final int white=0;final int black=255;for(int i=0;i