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