【问题标题】:converting a matrix to string将矩阵转换为字符串
【发布时间】:2013-04-28 07:39:33
【问题描述】:

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

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

 }

【问题讨论】:

  • “非常紧急!”过于本地化。

标签: java matrix tostring


【解决方案1】:

您需要覆盖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 是类中的变量。

【讨论】:

  • “您需要覆盖..” ..这样做时,请使用@Override 符号来避免此类问题。
  • 对不起,我不明白。整个代码不就是 toString() 函数吗?
  • 我已经扩展了我的答案。这有帮助吗?
  • 不是真的,我很难理解问题到底出在哪里。如果 str 写得很好,我返回它,为什么 eclipse 不显示矩阵的数字,而是显示其他内容?
  • 我只需要知道如何将数组转换成字符串,然后就可以了
【解决方案2】:

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)

【讨论】:

  • 我现在有另一个问题..在主类中,矩阵得到特定的数字,而不是我想的随机..加上我的输出是一个随机数,而不是整个矩阵。我该如何解决这个问题?
  • 你是如何在主类中构造矩阵的,他们希望你如何构造特定的矩阵?您的输出应该是整个矩阵很简单 - 编写一个遍历二维数组并打印出元素的 toString() 方法,即:遍历每一行,打印出元素,然后当您点击该行时,打印一个换行符和下一行开始打印。提示:你需要一个 for-for 循环。
  • 大家好!我稍微改变了我的代码,现在我得到了一些矩阵的输出,但不是全部,为什么?我的 toString() 代码是这样的: public String toString() { Matrix A = new Matrix(size1, size2);字符串 str = " ";最终 int 白色 = 0;最终 int 黑色 = 255; for (int i = 0; i
  • 你希望它打印什么类型的数据,你得到了什么?实际上有几件事你可以改进,我会在之后指出它们。白/黑想法的意义何在?
【解决方案3】:

不知何故你得到了哈希码。也许您可以使用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 中的变量总是小写的。

【讨论】:

    【解决方案4】:

    你可以简单地做:

    @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();
    }
    

    【讨论】:

    • 输出应该是:3 8 72 4 6 60 253 2 1,但我只得到:253 1..有人能解释为什么吗?
    • 可能是因为你的 toString() 没有反映你的矩阵内容,我给你写一个新的答案
    猜你喜欢
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2019-08-16
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多